这个jQuery方法有什么问题?

时间:2011-05-04 12:56:30

标签: 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),oldName会返回一个函数:

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

}

3 个答案:

答案 0 :(得分:2)

在jQuery 1.6之前,jQuery(".singlePaneOfGlassBlock").attr("oncontextmenu")返回一个函数,因为它返回DOM元素的属性而不是属性DEMO)。

这在jQuery 1.6(DEMO)中得到修复。

如果你不能使用jQuery 1.6,你必须在DOM元素上调用getAttribute

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

答案 1 :(得分:1)

检查oldName是否为null ...

答案 2 :(得分:0)

也许删除第三行的分配?替换可能会返回已替换的条目数。

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

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

}