大家帮忙看看下面的代码: <a class="reverseCheck" href="javascript:void(0)">反选所有</a>
<input type="checkbox" value="1" name="id" /><script type="text/ecmascript">
jQuery("input:checkbox").click(function(){ alert( jQuery(this).attr("checked") ) });
jQuery("a.reverseCheck").click(function(){ jQuery("input:checkbox").click() });
</script>
现在如果你直接用鼠标点击checkbox的话, 会先打勾, 再弹出"True".
可是点"反选所有"的链接的话, 会先弹出"True", 再打勾.一个是先打勾再alert, 一个是先alert再打勾.这样让我很苦恼, 请教大家有没有可以解决这个问题的方法, 谢谢

解决方案 »

  1.   

    checkbox不是只有执行onclick()才选上的,本身点击就会选上,onclick是你追加的一个方法,就是单击checkbox这个元素时会触发,可以把checkbox给disable掉,会发玩仍然可以执行onclick()事件,但是checkbox的状态去不会变成选上或者没不选上.
    所以你的写的代码:
    1.jQuery("input:checkbox").click(function(){ alert( jQuery(this).attr("checked") ) });
    这个触发的同时checkbox也选上了.
    2.jQuery("a.reverseCheck").click(function(){ jQuery("input:checkbox").click() });
    这个触发时会先去调用click事件,然后把属性追加checked,但这时alert()窗口弹出了,alert()窗口永远是最上面的,出现时页面上所有的动作都将会停止,checked属性也就会等到alert()消失才会执行了.楼主可以认为jQuery(this).attr("checked")是个判断语句,返回的是判断input 有没有checked,其实不是,而是返回jQuery(this).attr("checked")有没有执行
      

  2.   

    $(document).ready(function()
    {
    $(input:checkbox[name=item]).each(function()
    {
    $(this).attr("checked",true);
    }
    )
    })
      

  3.   


    你好, 谢谢你的回复, 我想你误会我的意思了, 我的确是用jQuery(this).attr("checked")判断这个checkbox有没有打勾, 但是jQuery可以用click()来给checkbox打勾的, 就像直接用鼠标点击了checkbox一样.我的问题是直接点checkbox时是先打勾, 再执行了checkbox里的onclick事件, 可是用jQuery的click()方法却是先执行onclick事件, 再打勾.现在的问题暂时是解决了, 我把代码改成这样
    jQuery("input:checkbox").click(function(obj, trigger){
        if(trigger) jQuery(this)[0].checked = !jQuery(this)[0].checked;
        alert( jQuery(this).attr("checked") ) ;
        if(trigger) return false;
    });
    jQuery("a.reverseCheck").click(function(){ jQuery("input:checkbox").trigger("click",true) });
      

  4.   

    补充一下, 不关alert事的, 因为我一开始没有使用alert时就出错了, 后来alert出来才知道是先打勾还是先执行onclick的问题.
      

  5.   


    $(function() {
      $("a.reverseCheck").click(function() {
        $("input:checkbox").each(function() {
          $(this).click();
        });
      });
    });