2014-01-24 36 views
0

我有一個函數,用於偵聽複選框的更改。當頁面加載時,取決於以前完成的步驟,複選框將被勾選或取消選中。JQUERY - 如果函數內部聲明不起作用

我想錄制,如果複選框更改或不。如果它改變了,然後又改變了,它將被重置爲它開始的值,因此這意味着它的值沒有變化。

我寫了下面的代碼來做到這一點。

//Checkboxes 
    var change ="<input class=\"changed\" type=\"hidden\" name=\"changed\" value=\"1\"/>"; 
    var nochange ="<input class=\"changed\" type=\"hidden\" name=\"changed\" value=\"0\"/>"; 
    var changed=false; 
    $(".change-event").change(function(){ 
     //alert("checked"); 

     if(changed==false) { 
      $(this).next(".changed").remove(); 
      $(this).after(change); 
      changed=true; 
     } 

     if(changed==true) { 

      $(this).next(".changed").remove(); 
      $(this).after(nochange); 
      changed=false; 

     } 

    }); 

更改函數中的if語句不起作用。由於註釋掉的警報正常工作,更改功能本身沒有問題。

我試過如果(!檢查),如果(檢查)作爲條件,但它仍然沒有工作。

幫助讚賞。

回答

4

你需要

if(changed==false) { 
     $(this).next(".changed").remove(); 
     $(this).after(change); 
     changed=true; 
    } else { 

     $(this).next(".changed").remove(); 
     $(this).after(nochange); 
     changed=false; 

    } 

別人在changed起始值爲假,則如果條件滿足第一...它改變了changedtrue值。然後再次檢查第二個條件,它將被滿足,因爲changed的值已經被第一個if更改,因此第二個塊也將被調用...因此它否定了第一個塊所做的所有更改。


但它看起來像它可以簡化爲

var change = "<input class=\"changed\" type=\"hidden\" name=\"changed\" value=\"1\"/>"; 
var nochange = "<input class=\"changed\" type=\"hidden\" name=\"changed\" value=\"0\"/>"; 
var changed = false; 
$(".change-event").change(function() { 
    $(this).next(".changed").remove(); 
    $(this).after(changed ? nochange : change); 
    changed = !changed; 
});