【问题标题】:Determine checked box status on page load, disable closest input if checked确定页面加载时的复选框状态,如果选中则禁用最近的输入
【发布时间】:2015-04-03 00:14:04
【问题描述】:

我有一个提示用户输入的表单,但是每个字段都有一个“不可用”复选框,以防数据不可用。

注意复选框的格式为:

<input id="un_123" class="unavailable" type="checkbox" name="un_123" value="unavailable">

如果用户选择此项,我有以下 jquery 来禁用该字段

  $(document).ready(function(){
    $('.unavailable').change(function() {
        var i = $(this).prev('input'),
            d = i.attr('disabled');
            i.attr('disabled', !d);
            i.val('Unavailable');
    });
});

使用复选框将字段切换为禁用。

但是,当页面加载时,复选框的状态被保留(如果选中,则将其记录在表格中并在页面加载时引用以将其加载为选中或未选中,但是该字段显然加载为未禁用。

我在一个页面上有多个这些字段/复选框配对的实例,因此我希望能够检查已加载的页面加载,然后禁用最接近它们的字段。

但如果没有 .change 触发器并依赖 this,我不确定如何继续?

我试过了:

  $(document).ready(function(){ 
      if($('.unavailable').is(':checked')){
        var i = $('.unavailable').prev('input'),
            d = i.attr('disabled');
            i.attr('disabled', !d);
            i.val('Unavailable');   
     }
});

但它不起作用(页面加载时禁用复选框旁边的所有输入)

【问题讨论】:

  • 只需将.trigger('change') 添加到处理程序
  • 对不起,我不熟悉 - 哪个版本?我现有的 jquery 在复选框更改时有效?我应该如何添加它?

标签: jquery checkbox toggle


【解决方案1】:

试试这个:

$(document).ready(function(){

    $('input.unavailable').change(function() {
                    var i = $(this).parent().prev('input'),
                            d = i.attr('disabled');
                            i.attr('disabled', !d);
                            i.val('Unavailable');
            });
    $('input.unavailable:checked').each(function(){
        var i = $(this).parent().prev('input');
        i.prop('disabled', true);
        i.val('Unavailable');});

});

http://jsfiddle.net/Lfjj8LrL/

【讨论】:

  • 我可以看到它应该如何工作,但由于某种原因它不适用于我的页面 - 控制台中没有错误,不知道如何调试它。
  • 你的 jQuery 版本是什么?你把它放在页面的什么位置?我可以看到整个页面的源代码吗?
  • 1.11.1(在你的 js fiddle 上测试它很好,确实如此)。最初尝试将它放在身体的底部,然后放在头部,但两次都包裹在“on DOM ready wrapper”中,所以我认为这无关紧要。从整个源代码 - 当然 - 它正在开发中,所以源代码中有一些混乱的测试数组,但目前你推荐的 jquery 位于第 522 行:pastebin.com/cqAbXvQJ
  • Gideon,你放错地方了。只需在change 之后将代码放入document.ready。外部$()document.ready 的同义词。如果你把它放进你的,请把它删除(见更新的清单和小提琴)。
  • 感谢您的笔记 - 我已经按照您的方式复制粘贴了,但它仍然没有禁用页面加载时检查的输入。我在 each(function() 中添加了一个警报,并在页面上的复选框中获得了相应数量的警报 - 所以一切都应该正常工作,但它并没有像我检查它们时那样禁用它们:(更新了 pastebin:pastebin.com/xZ1Ef6NU 相关代码现在在第 64 行
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-09-26
  • 2023-04-10
  • 1970-01-01
  • 2021-03-09
  • 1970-01-01
  • 2021-09-17
  • 1970-01-01
相关资源
最近更新 更多