使用jQuery切换输入禁用属性

vulvrdjw  于 2023-06-29  发布在  jQuery
关注(0)|答案(6)|浏览(124)

下面是我的代码:

$("#product1 :checkbox").click(function(){
    $(this)
        .closest('tr') // Find the parent row.
            .find(":input[type='text']") // Find text elements in that row.
                .attr('disabled',false).toggleClass('disabled') // Enable them.
                .end() // Go back to the row.
            .siblings() // Get its siblings
                .find(":input[type='text']") // Find text elements in those rows.
                .attr('disabled',true).removeClass('disabled'); // Disable them.
});

如何切换.attr('disabled',false);
我在谷歌上找不到。

rslzwgfq

rslzwgfq1#

$('#el').prop('disabled', (i, v) => !v);

**.prop()**方法获取匹配元素集中第一个元素的属性值。

参数

  • 属性**name**(例如disabledcheckedselected)任何可以为真或假的值
  • 属性**value**,可以是:
  • (empty)返回当前值。
  • boolean设置属性值。
    ***function**为每个匹配的元素调用,返回值用于设置属性。传递了两个参数;第一个参数是 index(数字,从0开始,随着每个找到的元素而增加)。第二个参数是元素的当前 * 值 *(true/false)。

所以在这个例子中,我使用了一个函数,它提供了索引(i)和当前值(v),然后我返回了与当前值相反的值,所以属性状态被颠倒了。

其他信息

.prop()方法只获取匹配集合中 first 元素的属性值。对于尚未设置的属性值,或者如果匹配的集合没有元素,则返回undefined。要单独获取每个元素的值,请使用循环结构,例如jQuery的.each().map()方法。

属性对比产品展示

在特定情况下,属性和特性之间的差异可能很重要。在jQuery 1.6之前,.attr()方法在检索某些属性时有时会考虑属性值,这可能会导致不一致的行为。从jQuery 1.6开始,.prop()方法提供了一种显式检索属性值的方法,而.attr()则检索属性。

lyr7nygr

lyr7nygr2#

我猜要获得完整的浏览器可比性disabled应该设置值disabled或被删除!
下面是我刚刚做的一个小插件:

(function($) {
    $.fn.toggleDisabled = function() {
        return this.each(function() {
            var $this = $(this);
            if ($this.attr('disabled')) $this.removeAttr('disabled');
            else $this.attr('disabled', 'disabled');
        });
    };
})(jQuery);

Example link
编辑:更新了示例链接/代码,以保持可链接性!
编辑2:
根据@lonesomeday的评论,这里有一个增强版本:

(function($) {
    $.fn.toggleDisabled = function(){
        return this.each(function(){
            this.disabled = !this.disabled;
        });
    };
})(jQuery);
qfe3c7zg

qfe3c7zg3#

$('#checkbox').click(function(){
        $('#submit').attr('disabled', !$(this).attr('checked'));
    });
sauutmhj

sauutmhj4#

另一个简单的选项,更新点击复选框。
HTML:

<input type="checkbox" id="checkbox/>
<input disabled type="submit" id="item"/>

jQuery:

$('#checkbox').click(function() {
    if (this.checked) {
        $('#item').prop('disabled', false); // If checked enable item       
    } else {
        $('#item').prop('disabled', true); // If checked disable item                   
    }
});

运行中:link

6za6bjd0

6za6bjd05#

过了一会儿,感谢@阿恩,我创建了这个类似的小函数来处理输入应该被禁用和隐藏,或启用和显示的地方:

function toggleInputState(el, on) {
  // 'on' = true(visible) or false(hidden)
  // If a field is to be shown, enable it; if hidden, disable it.
  // Disabling will prevent the field's value from being submitted
  $(el).prop('disabled', !on).toggle(on);
}

然后一个jQuery对象(比如$('input [name=“something”]'))被简单地切换:

toggleInputState(myElement, myBoolean)
qqrboqgw

qqrboqgw6#

这在attr的回调语法中相当简单:

$("#product1 :checkbox").click(function(){
  $(this)
   .closest('tr') // find the parent row
       .find(":input[type='text']") // find text elements in that row
           .attr('disabled',function(idx, oldAttr) {
               return !oldAttr; // invert disabled value
           })
           .toggleClass('disabled') // enable them
       .end() // go back to the row
       .siblings() // get its siblings
           .find(":input[type='text']") // find text elements in those rows
               .attr('disabled',function(idx, oldAttr) {
                   return !oldAttr; // invert disabled value
               })
               .removeClass('disabled'); // disable them
});

相关问题