2

チェックリストに「ToDo」の行があり、各行には「Completed」チェックボックスがあります。マウスでボックスをクリックすると、次のコードが実行され、情報が正しく投稿されます(タスクが完了したことを追跡するためにデータベースが更新されます)。

   $(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');
         }
     });

 });

問題は、ユーザーがタブを使用してフォーム内を移動し、代わりにスペースバーを使用してチェックボックスをオンにした場合、マウスダウンを使用しているため、これがトリガーされないことです。これをchange()代わりに変更しようとしましたが、アラートボックスが「false」で何度も表示され続けます。

チェックボックスをオンにしたばかりで、なぜそれが継続的に表示されるのか理解できないので、それは本当のはずです。

mousedown()このコードを正しく投稿する代わりに何を使用できますか?

4

2 に答える 2

1

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 チェックの true/false が間違っている/逆になっていることも確認しました。それも修正しました。

于 2012-09-26T04:00:16.733 に答える
0

.mousedown の代わりに .change を試してください:

http://nelsonwells.net/2010/06/jquery-change-event-on-checkbox/

于 2012-09-26T03:51:09.460 に答える