selector(menu)
От: Jukier  
Дата: 13.10.10 08:55
Оценка:
Добрый день, возникла следующая проблема (описываю упрощенно).
Есть два типа объектов с абсолютно разными контекстными меню.
Если выделить оба объекта сразу и на одном из них вызвать контекстное меню, то хотелось бы меню не показывать.
.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> игнорируется).
Спасибо.
Re: selector(menu)
От: c-smile Канада http://terrainformatica.com
Дата: 13.10.10 16:27
Оценка:
Здравствуйте, 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.
Re[2]: selector(menu)
От: Jukier  
Дата: 27.10.10 11:07
Оценка:
Здравствуйте, c-smile, Вы писали:

CS>Надо так:


CS>
CS>container[multi-selection] .f1 { context-menu:none; }
CS>container[multi-selection] .f2 { context-menu:none; }
CS>


Спасибо.

Это срабатывает для клика правой кнопкой мыши. А по вызову контекстного меню с клавиатуры оно все равно появляется.
Re[2]: selector(menu)
От: Jukier  
Дата: 01.11.10 07:46
Оценка:
Объясню поподробнее.

Если выделено несколько элементов в <widget type="select" multiple>, то по этому событию выставляю у widget'а атрибут "multi-selection". По клику правой кнопкой мыши контекстное меню не появляется. Все хорошо.

Но с клавиатуры, например по shift+F10, контекстное меню появляется даже если атрибут "multi-selection" ставлю в <html>.

[multi-selection] *
{
   context-menu:none;
}


Это баг?
Re[3]: selector(menu)
От: c-smile Канада http://terrainformatica.com
Дата: 01.11.10 17:48
Оценка:
Здравствуйте, 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>
Re[4]: selector(menu)
От: Jukier  
Дата: 02.11.10 07:22
Оценка:
Здравствуйте, 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>
Re[5]: selector(menu)
От: c-smile Канада http://terrainformatica.com
Дата: 03.11.10 00:28
Оценка:
Здравствуйте, 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);
}
Re[6]: selector(menu)
От: Jukier  
Дата: 03.11.10 08:07
Оценка:
Здравствуйте, c-smile, Вы писали:

CS>Поменяй местами эти два правила:


CS>они оба имеют один и тот же вес (selector specificity) поэтому второе (в твоем примере) перебивает первое.


CS>Или пиши так:


Спасибо за ответ. Но оба решения не работают
Так как поведения мыши и клавиатуры различаются, может дело не в весе?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.