代码之家  ›  专栏  ›  技术社区  ›  tkotitan

jQuery checkbox事件没有触发?

  •  4
  • tkotitan  · 技术社区  · 15 年前

    我有一个带有复选框的页面,其中一个是全选按钮。因此,当用户单击全选时,将选中所有其他框,当单击其他框时,将取消选中全选。这是密码。

              $(document).ready(function(event){   
                     //alert('wtf');
                $('#mailSubscribeAll').click(function(event){
                     //alert('wtf');
                    $('.mailingCheckbox').attr('checked','checked');
                });             
    
                $('.mailingCheckbox').bind('click',function(event){
                    //alert('wtf');
                    $('#mailSubscribeAll').removeAttr('checked');
                });
    
            });
    

    所以我的页面正在加载jQuery fine,第一个警报触发器。所有单击事件都不会发出警报。我已经仔细检查了我的HTML是否正确。

    那么,我是否对jQuery使用了错误的事件,或者我的页面可能与其他不是jQuery的javascript发生冲突?

    HTML代码段:

        <tr>
        <td class="CBT3" colspan="3" height="29">
            <input type="checkbox" class="mailingCheckbox" id="mailNewsAlerts"    value="1" {if $smarty.session.profile.mailNewsAlerts}checked{/if} onclick="subscribeMarkProfile()">
            <label for="mailNewsAlerts"><b>News Alerts</b> - <cite>The latest breaking news from XXXXXXX</cite></label>
        </td>
    </tr>    
    <tr>
        <td class="CBT3" colspan="3" height="29">
            <input type="checkbox" id="mailSubscribeAll"    value="1" {if $smarty.session.profile.mailSubscribeAll}checked{/if} >
            <label for="mailSubscribeAll"><b>Subscribe me to all XXXXX newsletters!</b> </label>
        </td>
    </tr>    
    

    我还将添加带有复选框的页面部分,当页面加载时不可见,但它在HTML中。我在单击按钮后显示该区域,但是当页面加载时,首先这些复选框是不可见的。

    3 回复  |  直到 15 年前
        1
  •  1
  •   Jan Willem B    15 年前

    它按预期工作,代码如下:

    <div>
      <input type="checkbox" id="mailSubscribeAll"/>
      <input type="checkbox" class="mailingCheckbox"/>
      <input type="checkbox" class="mailingCheckbox"/>
    </div>
    
    <script type="text/javascript">
      $(document).ready(function(event){   
        $('#mailSubscribeAll').click(function(){
          $('.mailingCheckbox').attr('checked','checked');
        });             
        $('.mailingCheckbox').click(function(){
          $('#mailSubscribeAll').removeAttr('checked');
        });
      });    
    </script>
    

        2
  •  1
  •   Ciantic    15 年前

    当以编程方式更改复选框的状态时,还必须检查事件 change ,单击并不总是触发:

    $('.mailingCheckbox').bind('change', ...
    

    既然你有两个功能,你应该做如下事情:

    function changeMailingCheckbox(...) { ... }
    $('.mailingCheckbox').bind('change', changeMailingCheckbox)
    $('.mailingCheckbox').bind('click', changeMailingCheckbox)
    
        3
  •  1
  •   Tarik    10 年前
     $("input:checkbox #mailSubscribeAll").click(function(event){
       $('.mailingCheckbox').attr('checked','checked');
    });  
    

    看起来不错,但你现在能试试这个代码吗。