当元素绑定到另一个元素时,.change不起作用?

时间:2011-08-17 18:04:11

标签: jquery

不太确定如何解释这个问题,但现在就去了。

我有一个基于复选框隐藏/显示的功能:

$( “#复选框”)发生变化(change_visibility);

  function change_visibility() {
   if ($("#checkbox").is(":checked")) {
       $("#theForm").fadeTo("opacity", "1", function() {
        //End Animation
     });

     } else {
       $("#theForm").fadeTo("opacity", "0.3", function() {
         //End Animation
     });
   }

问题是,现在我已将此复选框绑定到其他位置的按钮,而change()的行为与我预期的不同。

   $("#myButton").click(function(){
      $("#checkbox").attr("checked", true);
   });

即使复选框正在改变,但它似乎并没有像我手动点击它时那样调用change_visibility()函数。

知道为什么会这样吗?

5 个答案:

答案 0 :(得分:5)

每当您更改输入元素的状态或值时,都不会触发更改事件。

但你可以手动触发它:

$("#checkbox").prop("checked", true).change();

答案 1 :(得分:0)

简单的方法就是这样做

$("#myButton").click(function(){
      $("#checkbox").attr("checked", true);
      $("#checkbox").change();
});

答案 2 :(得分:0)

当您手动更改复选框时,听起来像.change()事件不会被触发。但解决方案仍然非常简单。只需自己调用change_visibility()函数:

  $("#myButton").click(function(){
      $("#checkbox").attr("checked", true);
      changeVisibility();
  });

答案 3 :(得分:0)

将事件处理程序附加到change事件,并在按钮单击时调用更改方法。

$("#checkbox").change(function() {
   if (this.checked) {
       $("#theForm").fadeTo("opacity", "1", function() {
        //End Animation
     });

     } else {
       $("#theForm").fadeTo("opacity", "0.3", function() {
         //End Animation
     });
   });


 $("#checkbox").attr("checked", true).change();

答案 4 :(得分:0)

尝试

$("#myButton").click(function(){
      $("#checkbox").attr("checked", true).trigger('change');
});

在动态选中框后,应触发更改事件。