【问题标题】:jQuery > on checkbox change run codejQuery > 复选框更改运行代码
【发布时间】:2012-09-17 15:17:17
【问题描述】:

我的清单上有几行“待办事项”,每行都有一个“已完成”复选框。用鼠标单击该框后,以下代码将运行并正确发布信息(更新数据库以跟踪任务已完成):

   $(function ()
 {
     $('[id*="howto_step_complete"]').mousedown(function ()
     {
         var id = $(this).attr('id');
         var howto_used_id = id.substr(id.length - 2);

         var howto_step_minutes = $('#howto_step_minutes' + howto_used_id).val();

         if (!$(this).is(':checked'))
         {
             var checked = true;
         }
         else
         {
             var checked = false;
         }
         var value = $('#howto_used_id').val();
         if (howto_step_minutes != '')
         {
             $.post("updateChecklist.php",
             {
                 howto_used_id: howto_used_id,
                 howto_step_complete: checked,
                 howto_step_minutes: howto_step_minutes
             },

             function (data)
             {
                 var obj = jQuery.parseJSON(data);
                 var howto_used_id_returned = obj.howto_used_id;
                 var howto_step_complete = obj.howto_step_complete;
                 alert(howto_step_complete);
             });
             $(this).trigger("change");
         }
         else
         {
             alert('Minutes must be filled out before checking complete');
         }
     });

 });

问题是,如果一个人使用制表符在表单中移动,然后使用空格键来选中该框,则不会触发,因为它使用的是 mousedown。我尝试将其更改为change(),但随后我的警报框不断出现“false”。

这应该是真的,因为我刚刚选中了该框,但我不明白为什么它会不断出现。

我可以使用什么来代替mousedown() 来让此代码正确发布?

【问题讨论】:

  • 在change()中,可以检查复选框是否被选中。如果选中,让代码运行。尽量不要使用 mousedown

标签: javascript jquery


【解决方案1】:

【讨论】:

【解决方案2】:

我将其更改为再次使用 change() 然后删除了触发器,我认为这是不断弹出警报框然后再次更改它并循环的原因。

$(function(){
        $('[id*="howto_step_complete"]').change(function() {
        var id = $(this).attr('id');
        var howto_used_id = id.substr(id.length - 2);

        var howto_step_minutes = $('#howto_step_minutes' + howto_used_id).val();

        if (!$(this).is(':checked')) { var checked = false; }else{ var checked = true; }
            var value = $('#howto_used_id').val();
            if(howto_step_minutes!=''){
             $.post("updateChecklist.php", { howto_used_id: howto_used_id, howto_step_complete: checked, howto_step_minutes: howto_step_minutes },
                        function(data) {
                        var obj = jQuery.parseJSON(data);
                           var howto_used_id_returned = obj.howto_used_id;
                        var howto_step_complete = obj.howto_step_complete;
                        alert(howto_step_complete);
                   });
            }else{ alert('Minutes must be filled out before checking complete'); }
        });

});

我还检查了 var 的真/假错误/反转。也解决了这个问题。

【讨论】:

  • 再过 14 小时我都无法接受自己的答案。我正在选择我自己的,因为它包含一个完整的解决方案。正如您所提到的,仅将其更改为 .change() 不起作用,正如我所提到的,我已经尝试过并且遇到了重复警报框的问题。我的答案包含反转变量和删除触发器的完整解决方案。
猜你喜欢
  • 2014-05-31
  • 2014-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多