2011-05-04 175 views
2

我有這樣的方法:這個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 

你看到的任何問題?對於我來說,只是奇怪...

UPDATE:只需注意使用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; 

}

+0

什麼初始化後,使用oldName包含哪些內容? – Mantar 2011-05-04 13:01:12

回答

2

jQuery的1.6之前,jQuery(".singlePaneOfGlassBlock").attr("oncontextmenu")因爲它返回的DOM元素的屬性返回一個功能不是屬性DEMO)。

這固定在jQuery 1.6(DEMO)。

如果你不能使用jQuery 1.6,你必須調用getAttribute的DOM元素上:

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

是的,你是正確的....它返回一個函數不是一個字符串... – 2011-05-04 13:02:45

0

在第三行也許去除分配?替換可能會返回替換條目的數量。

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

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

} 
+0

'replace'不在位。它返回一個新的字符串。但無論如何,錯誤是* oldName.replace不是一個函數*,這意味着'replace'不存在於第一位。 – 2011-05-04 13:34:51

1

檢查oldNamenull ...