未捕获的TypeError:无法读取属性'已检查'在public.js中未定义

时间:2017-05-16 15:21:22

标签: javascript jquery

最近我收到了错误

*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");}

1 个答案:

答案 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");
}