2012-02-28 64 views
0

我有一个表单,它有很多下拉菜单。用户选择一个选项并出现相关的文本框。我使用.delegate()来获得select s上的每个更改。但是,当用户更改说第三个,所有选择同时更改,如何在单独选择时进行更改,同时有很多选择

$(function() { 
     $("#formbody").delegate("select", "change", function(){    
     var type = $(this).find("option:selected").val(); 
     $("input").hide().filter("." + type).show(); 
     $(":button").show(); 
     }); 
    }); 

所有选择动态添加到div,与增量id。

<div id="div1"> 
<select id="new"> 
<option value="one">one</option> 
<option value="two">two</option> 
</select> 
<input class="one" name="first_input"/> 
<input class="two" name="second_input"/> 
</div> 
<div id="div2"> 
    <select id="new"> 
    <option value="one">one</option> 
    <option value="two">two</option> 
    </select> 
    <input class="one" name="first_input"/> 
    <input class="two" name="second_input"/> 
    </div> 

但是因为我不知道JQuery,所以我找不到解决方案。

+0

的ID必须是唯一的 – 2012-02-28 07:57:46

+0

尝试用唯一的ID。 – 2012-02-28 07:58:42

+0

仅供参考,.delegate现在被jQuery 1.7中的.on方法取代。 – 2012-02-28 08:03:13

回答

1

此:

$("input") 

比赛页面上的所有<input>元素。这就是为什么$("input").hide()隐藏所有这些。你想要更多的东西是这样的:

$(this).closest('div').find('input').hide()... 

只工作与<input> S中的含<div>当前的内部。

此外,您的<select>使用“one”和“two”作为值,但您的类是“第一”和“第二”。我想你想你的<select> s到看上去就像这样:

<select id="new"> 
    <option value="first">one</option> 
    <option value="second">two</option> 
</select> 

而且你应该做的事重复id="new"属性。

你也有$(":button").show(),但没有按钮。

上述修正的演示:http://jsfiddle.net/ambiguous/9fsc5/

+0

谢谢,我有添加额外div的按钮。我确实看过你的小提琴,但第二个改变不会影响选择。如何解决? (我现在正在尝试你的.closest建议) – teutara 2012-02-28 08:26:18

+0

谢谢“mu太短”..选择最接近的div帮助..干杯! – teutara 2012-02-28 08:47:02

1

您的选择菜单具有相同的ID。将ID的值更改为每个菜单的唯一值,并且您将获得解决方案。

<select id="new"> 
    <option value="one">one</option> 
    <option value="two">two</option> 
    </select> 
    ..... 
    <div id="div2"> 
    <select id="new"> 
     <option value="one">one</option> 
     <option value="two">two</option> 
    </select> 

这些选择列表具有相同的ID。所有与它们相关的Javascript都会影响到这两者。更改其中一个ID值或使用类别,例如

$(".new").delegate(etc, function(){ 
    var thisSelectListValue = $(this).val; //use the select list we interacted with 
    //your other code will go here 

应该做你想要的。

+0

谢谢Ohgodwhy,但我没有抓住这一切。 – teutara 2012-02-28 08:07:42