用于获取类属性的on-click函数的JavaScript异常

时间:2017-12-12 03:53:14

标签: javascript jquery

我需要帮助来解决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");
    } 
}

3 个答案:

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

阅读这篇文章了解更多信息

How to check for "undefined" in JavaScript?

答案 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