2012-09-26 15 views
2

我在清單中有「待辦事項」行,每行都有一個「已完成」複選框。當用鼠標單擊框,下面的代碼運行,並正確地職位信息(更新數據庫來跟蹤任務已經完成):jQuery>關於複選框更改運行代碼

$(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()來讓這段代碼正確發佈?

+0

in change(),你可以檢查複選框是否被選中。如果它被選中,讓代碼運行。儘量不要使用mousedown – Asdfg

回答

1

我改成了再次使用的變化(),然後取出扳機,我認爲這是什麼不斷彈出警告框,然後再次改變它,並循環。

$(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檢查錯誤/扭轉。修正了這一點。

+0

你能接受一個答案? – abellina

+0

我不能接受我自己的答案14個小時。我選擇我自己的,因爲它包含一個完整的解決方案。只是將它改爲.change()就像我剛纔提到的那樣工作不正常,我已經試過了,並且出現了重複警報框的問題。我的答案包含了扭轉變量和去除觸發器的完整解決方案。 –