attr不是jquery中的函数

时间:2013-09-17 07:18:19

标签: jquery

下面是我的jQuery代码,我必须更改属性:

我有2个类似项目的列表,我必须禁用第二个列表中第一个的选定项目,并且在第一个列表中我有前缀lstrYM与项目,在第二个列表中有前缀ltrY2与项目 < / p>

我在jquery的一周,所以我不知道如何找到,所以我跑了回路

 $('#lsltrYMaxis').change(function () {
     var flg = 0;
     $('#lsltrYMaxis option').each(function () {
         var val = this.value;
         val = val.replace("YMa", "Y2a"); // find y2 axis with similar index
         var chk = $(this).is(':checked'); // checked 
         //            alert(val);
         //            alert(chk);
         $('#lsltrY2axis option').each(function () {
            var val2 = this.value;
            alert(val + ";" + val2 + ";" + chk);
            if (val === val2) {
                if (chk === true) {
                    alert((this).value);
                    $(this).attr({ 'disabled': true, 'aria-disabled': true, 'checked': false, 'aria-selected': false }).addClass('ui-state-disabled');
                    alert('done');
                    flg = 1;
                    return false;
                }
                else {
                    $(this).attr({ 'disabled': false, 'aria-disabled': false }).removeClass('ui-state-disabled');
                    flg = 1;
                    return false;

                }
            }

        });
        if (flg == 1)
            return false;
    });


});

但它说

  

(this).attr不是函数

应用属性

我做错了什么?

4 个答案:

答案 0 :(得分:1)

inside .each()内部回调this是指没有.attr()方法的dom对象 - 它是由jQuery提供的,所以你需要获取元素的jQuery包装器,这样你就可以了需要使用$(this).attr()

$('#lsltrY2axis option').each(function () {
    var val2 = this.value;
    alert(val + ";" + val2 + ";" + chk);
    if (val == val2 && chk == true) {
        $(this).attr({ 'disabled': true, 'aria-disabled': true, 'checked': false, 'aria-selected': false }).addClass('ui-state-disabled');
    }
    else {
        $(this).attr({ 'disabled': false, 'aria-disabled': false }).removeClass('ui-state-disabled');
    }
});

答案 1 :(得分:1)

使用

$(this).attr([attribute is here]);

使用this指的是DOM。

此外,您必须使用this

替换所有$(this)次出现

答案 2 :(得分:1)

我已将this更改为$(this)
然后=====
希望它有效

$('#lsltrY2axis option').each(function () {
                var val2 = $(this).value;
                alert(val + ";" + val2 + ";" + chk);
                if (val === val2 && chk === true) {
                    $(this).attr({ 'disabled': true, 'aria-disabled': true, 'checked': false, 'aria-selected': false }).addClass('ui-state-disabled');
                }
                else {
                    $(this).attr({ 'disabled': false, 'aria-disabled': false }).removeClass('ui-state-disabled');
                }

            });

答案 3 :(得分:0)

你应该写:

$(this).attr