2011-10-19 138 views
2

我试图让jQuery的addClass和removeClass在表单选择环境中工作,但很少成功。jQuery addClass和removeClass onchange问​​题

我想修改父div的类,并试图在函数中传递ID,但我所有的尝试都是徒劳的。任何方向和协助将不胜感激。

<div id="MaxAge" class="SearchFormStyle"> 
       <select name="maxage" onchange="addClass(MaxAge);"> 
        <option value="0">Age</option> 
        <option value="1" >1 Year Old</option> 
        <option value="2" >2 Years Old</option> 
       </select> 
        <span class="ThisValue"> 
         <a href="#" onclick="RemoveClass(MaxAge)">VALUE ENTERED HERE</a> 
        </span> 
       </div> 

<script> 
    function addClass (id) { 
     div = "#" + id; 
     $(div).addClass("InputSet"); 
    } 
    function RemoveClass (id) { 
     div = "#" + id; 
     $(div).removeClass("InputSet"); 
    } 
</script> 
+0

我不太明白,究竟是什么目的呢? – Kyle

+0

效果示例:http://www.autotrader.co.uk/ 在汽车搜索上,选择最大价格以查看效果。 – razzezz

回答

3

addClass(MaxAge)将可变MaxAge值传递给addClass,不是字符串'MaxAge'

再说了,你真的应该使用jQuery绑定的,而不是内联事件处理程序事件处理程序:

$("select[name='maxage']").change(function() { 
    addClass('MaxAge'); 
}); 

$('.ThisValue a').click(function(event) { 
    RemoveClass('MaxAge'); 
    event.preventDefault(); 
}); 

要了解更多有关事件处理程序,我推荐阅读articles at quirksmode.org


还有其他一些问题,如在addClassRemoveClass全球div变量。当你声明变量时不要忘记var。此外,该功能的命名不一致add vs Remove

MDN JavaScript Guide非常适合学习JavaScript基础知识。

0

你几乎是正确的做法。这是我会做的(有一些评论给你)

// onchange event of the selectbox with id = maxage 
$("#maxage").change(function() { 
    $("#MaxAge").addClass("InputSet"); 
}); 

// the click event for the a element within span with class ThisValue 
$("span.ThisValue a").click(function(e) { 
    // prevent doing default behaviour like going to another location... 
    e.preventDefault(); 
    $("#MaxAge").removeClass("InputSet"); 
}); 
+0

我的表单中有大约10个select,所以它可以更容易地拥有一个可以处理所有选择的函数,而不是每个元素ID的函数。 希望有道理? – razzezz

0

你永远不会实例化div变量。

试试这个:

var div = "#" + id; 
+0

谢谢,但这没有效果 – razzezz