我需要帮助来解决Chrome控制台中针对以下脚本的异常问题。 (我不擅长JavaScript。)
例外是
未捕获的TypeError:无法读取属性' indexOf'未定义的
indexOf
行正在抛出错误。
document.onclick = function(e){
var target = e.target ? e.target : e.srcElement;
if($(target).attr('class').indexOf('abcd') == -1 && $(target).attr('class').indexOf('js-toggle') == -1){
$(".nav-mn").animate({left:"-270px"},200);
$("body").animate({left:"0px"},200);
$(".nav-mn").removeClass("open");
}
}
答案 0 :(得分:1)
当您收到此错误Cannot get the property of undefined
时,表示您正在尝试访问不存在的内容。因此,在您的情况下,您需要检查$(target).attr('class')
是否存在,然后再调用.indexOf()
mehtod,如下所示。
document.onclick = function(e){
var target = e.target ? e.target : e.srcElement;
if($(target).attr('class') != 'undefined' && $(target).attr('class').indexOf('abcd') == -1 && $(target).attr('class').indexOf('js-toggle') == -1){
$(".nav-mn").animate({left:"-270px"},200);
$("body").animate({left:"0px"},200);
$(".nav-mn").removeClass("open");
}
}
阅读这篇文章了解更多信息
答案 1 :(得分:1)
我不确定你为什么要使用indexOf检查一个类而不是你应该使用jQuery hasClass
的内置函数。
确定是否为任何匹配的元素分配了给定的类
这将使您无法检查attr('class')
是否未定义。但是,您必须确保$(target)
永远不会被定义。
下面是一个相同的小演示。
$("div").click(function(){
if ($(this).hasClass("abcd") ) {
//do something it does have the class!
console.log("i have the abcd class");
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="abcd def ghi">
Click Me
</div>
答案 2 :(得分:0)
document.onclick
DOM
事件为绑定,$("Your element").click(function(){ // "Your element" is change according to your element type wheater it's a div or button.
if ($(this).hasClass("abcd") ) {
if($(this).attr('class') != 'undefined' && $(this).attr('class').indexOf('abcd') == -1 && $(this).attr('class').indexOf('js-toggle') == -1){
$(".nav-mn").animate({left:"-270px"},200);
$("body").animate({left:"0px"},200);
$(".nav-mn").removeClass("open");
}
}
});
中的每个元素都意味着,如果您点击按钮,该事件也会定位按钮父级。
为此,您可以为特定类型的元素绑定事件。
absc
并且不需要对同一个类名js-toggle
或$("Your element").click(function(){ // "Your element" is change according to your element type wheater it's a div or button.
if ($(this).hasClass("abcd") && $(this).hasClass('js-toggle')) {
$(".nav-mn").animate({left:"-270px"},200);
$("body").animate({left:"0px"},200);
$(".nav-mn").removeClass("open");
}
});
进行多次检查,您也可以对嵌套条件使用相同的方法。
offsetBy