gpt4 book ai didi

jquery - jQuery 方法中奇怪的 npe

转载 作者:行者123 更新时间:2023-12-01 08:23:20 24 4
gpt4 key购买 nike

我有这个 jQuery 方法,如果我所在的页面上找到了具有 .singlePaneOfGlassBlock 类的元素,则该方法可以正常工作。

function replaceRightClickIcefacesMethod() {
//I only want this to run on IE for now, but the content
//is prepared to run on other browsers too
if (jQuery.browser.msie) {
var elem = jQuery(".singlePaneOfGlassBlock"), oldName = elem
.attr("oncontextmenu"), fn = String;

//IE returns function instead of string so let's try to take the string
//in the right way
if (typeof oldName == "function") {
oldName = elem[0].getAttributeNode("oncontextmenu").value,
fn = Function;
}
//do the replace
oldName = oldName.replace('Ice.Menu.contextMenuPopup',
'contextMenuPopupUpdated');
//change oncontextmenu with the new value
jQuery.each(elem, function() {
this.setAttribute("oncontextmenu", fn(oldName));
})
}
}

但它失败并出现以下错误:

`'undefined' is null or not an object`

如果我在缺少这些类型元素的其他页面上,它会尝试进行替换...

在进行替换之前,我添加了一个检查来查看它是否为 null 或者是否包含该字符串,但它仍然失败:

if (jQuery(oldName).length || oldName.indexOf("Ice.Menu.contextMenuPopup") != -1) {
oldName = oldName.replace('Ice.Menu.contextMenuPopup',
'contextMenuPopupUpdated');
jQuery.each(elem, function() {
this.setAttribute("oncontextmenu", fn(oldName));
})
}

你能给我一个解决方案吗?

谢谢。

更新:当我询问解决方案时,我只是询问如何纠正此方法,使其在找不到该类型的元素时不运行?

最佳答案

Can you give me a solution?

我不确定 - 对于初学者,请格式化您的代码,以便更清楚它应该做什么。 看起来好像在 if 条件后面缺少一对大括号。

至少,不要使用逗号分隔的表达式来实现两个赋值 - 将该 block 放在大括号中并正确拆分两个赋值。那么代码逻辑应该会变得更加清晰。

无论如何,由于只有当页面上不存在该类时才会出现问题,因此这应该是您的第一个测试:

function replaceRightClickIcefacesMethod() {
if (jQuery.browser.msie) {
var elem = jQuery(".singlePaneOfGlassBlock");

if (elem.length > 0) { // new test here!

var oldName = elem.attr("oncontextmenu");
var fn = String;

if (typeof oldName == "function") {
oldName = elem[0].getAttributeNode("oncontextmenu").value;
fn = Function;
}

//do the replace
oldName = oldName.replace('Ice.Menu.contextMenuPopup',
'contextMenuPopupUpdated');

//change oncontextmenu with the new value
jQuery.each(elem, function() {
this.setAttribute("oncontextmenu", fn(oldName));
});
}
}
}

关于jquery - jQuery 方法中奇怪的 npe,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5898283/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com