重构jquery以传递jquery-lint

时间:2010-11-08 10:11:25

标签: jquery jquery-lint

我在html页面中有以下代码

jQuery("input[name='newstate']").change(function(){
    if(jQuery(this).attr("checked")) {
        jQuery('input[name="new-state-name"]').show();
    } else {
        jQuery('input[name="new-state-name"]').hide();
    }
});

但是jquery lint给出了以下消息。

  

当您知道返回的集合不同时,您应该只使用同一个选择器多次。例如,如果您向页面添加了更多符合选择器的元素

如何修改我的代码以删除此消息

2 个答案:

答案 0 :(得分:3)

.toggle()方法接受showOrHide的布尔值:

jQuery("input[name='newstate']").change(function(){
    // You can use this.checked instead of jQuery(this).attr("checked");
    jQuery('input[name="new-state-name"]').toggle(this.checked);
});

这样你就知道 new-state-name输入的显示状态总是newstate输入相匹配(即,它会在检查时显示,不管它以前的状态)。我的意思是,如果使用不toggle()的{​​{1}},则可能会导致showOrHide状态和newstate显示状态不同步,例如new-state-name输入的显示状态由new-state-name newstate处理程序外部操纵。


当然,您也可以将结果集分配给临时变量,以便只执行一次选择器:

change()

如果您打算做的不仅仅是显示/隐藏。


修改
哎呀,不幸的错字。 <{1}}在第一个解决方案中应为jQuery("input[name='newstate']").change(function(){ var newStateInput = jQuery('input[name="new-state-name"]'); if(this.checked) { newStateInput.show(); // ... more here } else { newStateInput.hide(); // ... and/or here } });

答案 1 :(得分:1)

jQuery("input[name='newstate']").change(function(){
      jQuery('input[name="new-state-name"]').toggle();
});