最近我收到了错误
*Uncaught TypeError: Cannot read property 'checked' of undefined
at HTMLDocument.<anonymous> (public.js:1)
at i (jquery.js:1)
at Object.fireWith [as resolveWith] (jquery.js:1)
at Function.ready (jquery.js:1)
at HTMLDocument.K (jquery.js:1)*
这已经工作了很长时间但我怀疑最近的更新导致了这个错误。 我自己没有创建脚本,我对JS不熟悉,但我仍然想弄明白。
如果我没弄错,这是相关的代码:
if($("#ship-to-different-address-checkbox").get(0).checked){$("#ship-to-
different-address-
checkbox").get(0).checked=false;$(".shipping_address").addClass("dhl-
hide");$("#ship-to-different-address-checkbox").trigger("change");}
答案 0 :(得分:0)
“脚本在某些更改之前正常工作,但您无法识别哪一个”
关于导致此问题的情况的信息不多,因此我将假设一些方案来帮助您找到解决方案。
场景1:假设在脚本运行时元素在DOM中不可用,因此当您尝试访问属性checked
时,它会失败。
如果元素可用且准备就绪,请确保您只访问属性!见(https://learn.jquery.com/using-jquery-core/document-ready/),例如:
$(document).ready(function () {
if ($("#ship-to-different-address-checkbox").get(0).checked) {
$("#ship-to-different-address-checkbox").get(0).checked=false;$(".shipping_address").addClass("dhl-hide");
$("#ship-to-different-address-checkbox").trigger("change");
}
});
为什么不放置最接近的?
场景2:元素ID已更改,因此选择器返回undefined。仔细检查该元素的ID,在尝试访问该属性并确认所选的element
或DOM元素属于正确类型且具有属性{{1}之前,检查该元素是否存在且是否为DOM元素},例如:
checked
你当然可以把它们放在一起,比如:
// ID should always refer to a single element,
// it's not valid to have more then one element ID in the page
// So, expect only one:
var element = $("#ship-to-different-address-checkbox")
// You should do this for any other selector/element
if (typeof element !== 'undefined' && element.is(":checkbox") && element.checked) {
element.checked.checked = false
// anything else
element.trigger("change");
}