2013-04-13 76 views
2

第一個功能將div點擊轉換爲自定義選中/未選中切換。第二個函數將複選框更改轉換爲檢查/取消選中事件(此工作正常)。爲什麼我的複選框更改事件沒有被觸發?

問題是,當我使用第一個函數來檢查/取消選中該框時,第三個函數不會被調用。我是JavaScript新手,謝謝。

$(document).ready(function() { 
/* 
    Progressive enhancement. If javascript is enabled we change the body class. Which in turn hides the checkboxes with css. 
*/ 
$('body').attr("class","js"); 

/* 
    Add toggle switch after each checkbox. If checked, then toggle the switch. 
*/ 
$('.checkbox').after(function(){ 
    if ($(this).is(":checked")) { 
    return "<a href='#' class='toggle checked' ref='"+$(this).attr("id")+"'></a>"; 

    }else{ 
    return "<a href='#' class='toggle' ref='"+$(this).attr("id")+"'></a>"; 

    } 


}); 

/* 
    When the toggle switch is clicked, check off/de-select the associated checkbox 
*/ 
$('.toggle').click(function(e) { 
    var checkboxID = $(this).attr("ref"); 
    var checkbox = $('#'+checkboxID); 

    if (checkbox.is(":checked")) { 
    checkbox.removeAttr("checked"); 

    }else{ 
    checkbox.attr("checked","true"); 
    } 
    $(this).toggleClass("checked"); 

    e.preventDefault(); 
}); 


}); 

$(document).ready(function(){ 

$(":checkbox").change(function(){ 

if ($(this).is(":checked")) { $(el).layerSlider('start'); 
}else{ $(el).layerSlider('stop');} 
}); 

}); 
+0

請參閱http://stackoverflow.com/a/5916151/1176601 – Aprillion

回答

1

爲了增加動態內容的事件(在這種情況下,動態錨元素) 你將不得不使用直播或功能。

對於較早的jQuery版本到1.7,您將不得不使用Live功能。

$('.toggle').live("click", function (e) { 
     var checkboxID = $(this).attr("ref"); 
     var checkbox = $('#' + checkboxID); 

     if (checkbox.is(":checked")) { 
      checkbox.prop('checked', false); 

     } else { 
      checkbox.prop('checked', true); //jQuery 1.6+ 
     } 
     e.preventDefault(); 
    }); 

從jQuery 1.7+ Live被棄用,從1.9+ Live被刪除。所以,如果你使用jQuery 1.9+使用On。

$('.toggle').on("click",function (e) { 
     var checkboxID = $(this).attr("ref"); 
     var checkbox = $('#' + checkboxID); 

     if (checkbox.is(":checked")) { 
      checkbox.prop('checked',false); 

     } else { 
      checkbox.prop('checked', true); //jQuery 1.6+ 
     } 
     e.preventDefault(); 
    }); 

並且還使用prop函數來檢查/取消選中該複選框。 (Prop是從jQuery 1.6中添加的)

+0

即使對於jquery <1.7,您也不必使用LIVE,但使用委託更好:http://api.jquery.com/delegate/ –

+0

對於.prop()的參考 –

+0

事件改變現在正常,但第三個函數$(「:checkbox」)。change(function()不起作用,檢查事件更改並執行我需要的代碼的函數在這種情況下。 –

-2

您需要複選框觸發更改事件,而不是點擊

+0

可以幫助我舉一個例子如何在複選框上使用觸發器更改事件。謝謝 –

+0

-1我沒有看到由代碼觸發的任何點擊事件 – Aprillion

相關問題