функция js не работает в IE8

У меня есть div, и при наведении курсора я показываю ice:menuPop с помощью этой функции:

function fireContextMenu(element, event) {
   if (element.getAttribute('oncontextmenu')) {
      element.oncontextmenu = new Function ('event', element.getAttribute('oncontextmenu'));
      element.oncontextmenu(event);
   }
}

называя это так:

onmouseover="fireContextMenu(this, event);"

В Chrome работает отлично, а в IE не появляется. Я полагаю, это что-то не так в js или IE8 не поддерживает наведение div?


person Cristian Boariu    schedule 23.02.2011    source источник
comment
Кстати, взгляните на это: stackoverflow.com/questions/259614/   -  person joshcomley    schedule 23.02.2011
comment
Icefaces вздрагивает.... new Function кричит   -  person Ivo Wetzel    schedule 23.02.2011
comment
Итак, каждый раз, когда мышь перемещается по вашему элементу, вы хотите установить для атрибута oncontextmenu новую функцию... правда? Как вы думаете, это сработает при втором наведении мыши на элемент?   -  person Pointy    schedule 23.02.2011
comment
getAttribute ужасно сломан, если вы не используете режим стандартов IE8. У этого нет надежды, если вы находитесь в режиме Quirks или в режиме совместимости с IE 7. getAttribute лучше избегать в пользу прямых методов доступа к свойствам.   -  person Quentin    schedule 23.02.2011
comment
@Pointy: да, это работает. Если вы можете предложить лучший способ, я был бы признателен.   -  person Cristian Boariu    schedule 23.02.2011
comment
Хм, если это работает, это, вероятно, потому, что функция, установленная в предыдущем вызове, преобразуется обратно в строку, а затем переделывается в новую функцию.   -  person Pointy    schedule 23.02.2011
comment
единственная проблема, которую я вижу сейчас, заключается в том, как получить значение onContextMenu в IE? поэтому обходной путь для этого: элемент .getAttribute('oncontextmenu') приветствуется...   -  person Cristian Boariu    schedule 23.02.2011


Ответы (1)


Решено.

Больше не используйте функцию js, а используйте непосредственно значение oncontextmenu.

Для моего случая:

onmouseover="Ice.Menu.contextMenuPopup(event, 'frmMainMenu:menuPopupCBM_sub', 'frmMainMenu:divMenuPopupCBM');return false;"
person Cristian Boariu    schedule 23.02.2011