根据下拉菜单中的选择追加一个元素
Appending an element based on choice from a dropdown
我正在尝试创建基于从下拉菜单选择的多个字段,但当我从选项中选择时,它只考虑到第一个下拉菜单,所以如果我创建3个具有不同值的字段,它将只采取第一个字段3次
这是我正在使用的当前函数
<button id="addInput">Add Another Field</button>
<div id="inputDiv">
<p>
<select id = "dropdown">
<option value="null"></option>
<option value="text">Text</option>
<option value="note">Note</option>
</select>
</p>
</div>
<button id="submit">submit</button>
<div id="form"></div>
jQuery $('#submit').live('click', function() {
$("select").each(function() {
if($('#dropdown').val() == "text"){
$("#form").append('<input type="text"/>');
}
else if($('#dropdown').val() == "note"){
$("#form").append('<textarea></textarea>');
}
});
});
这里是我正在制作的小提琴http://jsfiddle.net/me74Z/
我已经用几种方法更新了你的小提琴:
- 使用
$(this).val()
-这是你的问题的实际答案 - 使用一个类
remInput
-你不应该有多个元素与相同的id
- 使用
on
代替已弃用的live
- 使用
switch
来提高可读性 - 在删除代码中使用
closest
,使您的代码工作,如果一切都被另一个<p>
$('#addInput').on('click', function() {
$('#inputDiv').append('<p> <select> <option value="null"></option> <option value="text">Text</option> <option value="note">Note</option> </select> <button class="remInput">Remove</button> </p>');
});
$(document).on('click', '.remInput', function() {
$(this).closest('p').remove();
});
$('#submit').on('click', function() {
$("select").each(function() {
switch($(this).val()) {
case "text":
$("#form").append('<input type="text"/>');
break;
case "note":
$("#form").append('<textarea></textarea>');
break;
}
});
});
如果您正在使用#dropdown,请使用$(this)代替。
这里是小提琴:http://jsfiddle.net/me74Z/6/
代码:$('#submit').live('click', function() {
$("select").each(function() {
if($(this).val() == "text"){
$("#form").append('<input type="text"/>');
}
else if($(this).val() == "note"){
$("#form").append('<textarea></textarea>');
}
});
});
没有在循环中选择当前元素。试试这个
$('#submit').live('click', function() {
$("select").each(function() {
if($(this).val() == "text"){
$("#form").append('<input type="text"/>');
}
else if($(this).val() == "note"){
$("#form").append('<textarea></textarea>');
}
});
});
通过将'#dropdown'替换为this,循环将检查当前元素的val而不是第一个。
这是因为您只检查#dropdown的值。使用this
代替:
if ($(this).val() == "text") {
$("#form").append('<input type="text"/>');
} else if ($(this).val() == "note") {
$("#form").append('<textarea></textarea>');
}
<<p> jsFiddle例子/strong> 注意:正如其他人提到的,是时候使用.on()
代替.live()
了,因为它在jq 1.9中被删除了。
您只需要使用this
。这样,它检查元素的每次迭代,并相应地检查它自己的值(this
)。
$('#submit').live('click', function() {
$("select").each(function() {
if($(this).val() == "text"){
$("#form").append('<input type="text"/>');
}
if($(this).val() == "note"){
$("#form").append('<textarea>hell</textarea>');
}
});
});
相关文章:
- 使用clickToggle并在单击另一个元素时关闭元素
- 表追加而不附加最后一个元素
- 滚动到容器中的下一个元素-几乎到了
- 使用CSS或js,使用动态选择器选择任意li的下一个元素
- 按我自己的类克隆另一个元素的内容和顺序
- Javascript获取上一个元素的内容
- 如何通过HTML+CSS中的另一个元素Selector更改元素的属性值
- 在数组中的一个元素上设置多个值
- 无法选择除一个元素外的所有元素
- 使用jquery contains获取一个元素并添加类
- $(.class).empty总是缺少一个元素
- jQuery-将列表项的一个元素移动到同一项的另一个元素中+对我的列表中的每个项执行此操作
- 如何在一个元素动画之后延迟
- jQuery转盘下一个元素没有滑入
- jquery从另一个元素中移除移除
- DIV怎么能像Javascript中的另一个元素一样工作呢
- 当知道同一hiearch中至少有一个元素时,遍历到元素.结构使用jquery
- 使用数据属性将HTML数据复制到另一个元素
- 如何选择给定类的上一个元素
- 动态修改一个元素,使其与给定的选择器匹配