Javascript 为什么没有触发我的复选框更改事件?

Javascript 为什么没有触发我的复选框更改事件?,javascript,jquery,Javascript,Jquery,第一个函数将div单击转换为自定义的选中/未选中切换。第二个函数将复选框更改转换为check/uncheck事件,这样可以正常工作 问题是,当我使用第一个函数选中/取消选中复选框时,第三个函数没有被调用。我是javascript新手,谢谢 $(document).ready(function() { /* Progressive enhancement. If javascript is enabled we change the body class. Which in turn h

第一个函数将div单击转换为自定义的选中/未选中切换。第二个函数将复选框更改转换为check/uncheck事件,这样可以正常工作

问题是,当我使用第一个函数选中/取消选中复选框时,第三个函数没有被调用。我是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');}
});

 });

您需要在复选框上触发更改事件,而不是单击

您需要在复选框上触发更改事件,而不是单击

将事件添加到动态内容(在本例中为动态锚元素) 您必须使用live或on功能

$('.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();
    });
对于1.7之前的jquery版本,必须使用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();
    });
不推荐使用From jQuery 1.7+Live,删除From 1.9+Live。因此,如果您使用的是jQuery 1.9+Live,请在上使用

$('.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添加的,用于将事件添加到动态内容中(在本例中为动态锚元素) 您必须使用live或on功能

$('.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();
    });
对于1.7之前的jquery版本,必须使用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();
    });
不推荐使用From jQuery 1.7+Live,删除From 1.9+Live。因此,如果您使用的是jQuery 1.9+Live,请在上使用

$('.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功能选中/取消选中复选框。从jQuery 1.6添加的道具可以帮助我举一个如何在复选框上使用触发器更改事件的示例。感谢您给我举一个如何在复选框上使用触发器更改事件的示例。感谢您,即使jquery<1.7,您也不必使用LIVE,现在最好使用delegate:Events change,但第三个函数$:checkbox.changefunction不起作用,检查事件并执行本例中所需代码的函数。@Gabriel Bora您可以将第三个函数逻辑的功能移到$'.toggle'.onclick,函数e{}中。例如,在函数内部,将逻辑修改为if checkbox.is:checked{checkbox.prop'checked',false;$el.layerSlider'stop';}否则{checkbox.prop'checked',true;$el.layerSlider'start';}即使对于jquery<1.7,也不必使用LIVE,现在最好使用delegate:Events change,但第三个函数$:checkbox.changefunction不起作用,检查事件并执行本例中所需代码的函数。@Gabriel Bora您可以将第三个函数逻辑的功能移到$'.toggle'.onclick,函数e{}中。例如,在函数内部,将逻辑修改为if checkbox.is:checked{checkbox.prop'checked',false;$el.layerSlider'stop';}否则{checkbox.prop'checked',true;$el.layerSlider'start';}