Добрый день, возникла следующая проблема (описываю упрощенно).
Есть два типа объектов с абсолютно разными контекстными меню.
Если выделить оба объекта сразу и на одном из них вызвать контекстное меню, то хотелось бы меню не показывать.
.f1{context-menu:selector(menu#file_1);}
.f2{context-menu:selector(menu#file_2);}
Для этого в handle_event()
if (params.cmd == POPUP_REQUEST)
{
Всем элементам меню set_attribute("style", L"display:none;");
}
При этом меню не показывается, но остается точка на месте его вызова правой кнопкой мыши.
Как от нее избавиться? (set_attribute("style", L"display:none;") для <menu> игнорируется).
Спасибо.
Здравствуйте, Jukier, Вы писали:
J>Есть два типа объектов с абсолютно разными контекстными меню.
J>Если выделить оба объекта сразу и на одном из них вызвать контекстное меню, то хотелось бы меню не показывать.
J>J>.f1{context-menu:selector(menu#file_1);}
J>.f2{context-menu:selector(menu#file_2);}
J>
Надо так:
container[multi-selection] .f1 { context-menu:none; }
container[multi-selection] .f2 { context-menu:none; }
Т.е. твой код устанавливает DOM атрибут multi-selection у некоего container.
Общий принципы:
1) Код занимается тем что переключает состояния и ДОМ атрибуты элементов. А CSS это все стилирует.
2) Как только у тебя возникает желание использовать set_style_attribute() см. п. 1.
Здравствуйте, c-smile, Вы писали:
CS>Надо так:
CS>CS>container[multi-selection] .f1 { context-menu:none; }
CS>container[multi-selection] .f2 { context-menu:none; }
CS>
Спасибо.
Это срабатывает для клика правой кнопкой мыши. А по вызову контекстного меню с клавиатуры оно все равно появляется.
Объясню поподробнее.
Если выделено несколько элементов в <widget type="select" multiple>, то по этому событию выставляю у widget'а атрибут "multi-selection". По клику правой кнопкой мыши контекстное меню не появляется. Все хорошо.
Но с клавиатуры, например по shift+F10, контекстное меню появляется даже если атрибут "multi-selection" ставлю в <html>.
[multi-selection] *
{
context-menu:none;
}
Это баг?
Здравствуйте, Jukier, Вы писали:
J>Объясню поподробнее.
J>Если выделено несколько элементов в <widget type="select" multiple>, то по этому событию выставляю у widget'а атрибут "multi-selection". По клику правой кнопкой мыши контекстное меню не появляется. Все хорошо.
J>Но с клавиатуры, например по shift+F10, контекстное меню появляется даже если атрибут "multi-selection" ставлю в <html>.
J>J>[multi-selection] *
J>{
J> context-menu:none;
J>}
J>
Покажи селектор который назаначает context menu. Интересует его вес (selector specificity).
Вот тебе пример в котором context menu включается и выключается.
<html>
<head>
<style>
button#trigger:checked + textarea#test { context-menu:none; }
</style>
<script type="text/tiscript"></script>
</head>
<body>
<button #trigger type="checkbox">Context menu disabled</button><br/>
<textarea #test />
</body>
</html>
Здравствуйте, c-smile, Вы писали:
CS>Покажи селектор который назаначает context menu. Интересует его вес (selector specificity).
Пример с одним элементом в списке. По правой кнопке мыши контекстного меню нет, с клавиатуры есть.
<html>
<head>
<style>
[multi-selection] *
{
context-menu:none;
}
.item
{
context-menu:selector(menu#menu1);
}
</style>
</head>
<body>
<widget type="select" multiple multi-selection>
<option class="item"><caption>one</caption></option>
</widget>
<menu id="menu1" style="display:none">
<li id="open">Open</li>
</menu>
</body>
</html>
Здравствуйте, Jukier, Вы писали:
J>Здравствуйте, c-smile, Вы писали:
CS>>Покажи селектор который назаначает context menu. Интересует его вес (selector specificity).
Поменяй местами эти два правила:
.item
{
context-menu:selector(menu#menu1);
}
[multi-selection] *
{
context-menu:none;
}
они оба имеют один и тот же вес (selector specificity) поэтому второе (в твоем примере) перебивает первое.
Или пиши так:
widget[multi-selection] .item
{
context-menu:none;
}
widget .item
{
context-menu:selector(menu#menu1);
}
Здравствуйте, c-smile, Вы писали:
CS>Поменяй местами эти два правила:
CS>они оба имеют один и тот же вес (selector specificity) поэтому второе (в твоем примере) перебивает первое.
CS>Или пиши так:
Спасибо за ответ. Но оба решения не работают
Так как поведения мыши и клавиатуры различаются, может дело не в весе?