что не так с этим методом jQuery?

#jquery

#jquery

Вопрос:

У меня есть этот метод:

 function replaceRightClickIcefacesMethod() {
    var oldName = jQuery(".singlePaneOfGlassBlock").attr("oncontextmenu");
    oldName = oldName.replace('Ice.Menu.contextMenuPopup', 'contextMenuPopupUpdated');

    jQuery(".singlePaneOfGlassBlock").attr("oncontextmenu", oldName);
}
  

Я не понимаю, почему Firebug сообщает:

 oldName.replace is not a function
  

Вы видите какую-либо проблему? Для меня это просто странно…

ОБНОВЛЕНИЕ: Просто обратите внимание, что oldName возвращает функцию, если я делаю alert (oldName):

 function oncontextmenu(event) {
Ice.Menu.contextMenuPopup(event, "j_id88:sectionContextMenu_sub", "j_id88:j_id111:0:j_id123:0:j_id124");
return false;
  

}

Комментарии:

1. Что содержит oldName после инициализации?

Ответ №1:

До jQuery 1.6 jQuery(".singlePaneOfGlassBlock").attr("oncontextmenu") возвращал функцию, поскольку она возвращала свойство элемента DOM, а не атрибут (ДЕМОНСТРАЦИОННЫЙ вариант).

Это исправлено в jQuery 1.6 (ДЕМО версии).

Если вы не можете использовать jQuery 1.6, вам придется вызвать getAttribute элемент DOM:

 var oldName = jQuery(".singlePaneOfGlassBlock")[0].getAttribute('onclick');
  

Ответ №2:

Проверьте, oldName есть null ли…

Ответ №3:

Может быть, удалить назначение в третьей строке? Replace может возвращать количество замененных записей.

 function replaceRightClickIcefacesMethod(){
  var oldName = jQuery(".singlePaneOfGlassBlock").attr("oncontextmenu");
  oldName.replace('Ice.Menu.contextMenuPopup','contextMenuPopupUpdated');

  jQuery(".singlePaneOfGlassBlock").attr("oncontextmenu",oldName);

}
  

Комментарии:

1. replace не на месте. Он возвращает новую строку. Но в любом случае, ошибка в oldName.replace не является функцией, что означает, что replace в первую очередь не существует.