我有以下HTML:
...
<div>
<select id="select_1" name="select_1">
<option value="1" selected="selected">Option 1</option>
<option value="2">Option 2</option>
...
</select>
<a id="add_1">Add New</a>
</div>
<div>
<select id="select_2" name="select_2">
<option value="1" selected="selected">Option 1</option>
<option value="2">Option 2</option>
...
</select>
<a id="add_2">Add New</a>
</div>
...
当我点击&#34;添加新的&#34;链接新的div与select创建。我需要设置新的选择,但不知道该怎么做,因为它还没有存在。我尝试过这样的事情:
$(document).ready(function() {
$('[id^=add_]').on('click', function() {
var new_select = $(this).parent().next().find('[id^=select_]'); // This doesn't work. Any way to do it?
...
});
});
});
感谢。
答案 0 :(得分:3)
closest
parent
以允许将来更改DOM。JSFiddle:http://jsfiddle.net/TrueBlueAussie/455ahpyw/4/
$(document).ready(function() {
$(document).on('click', '.add', function(e) {
e.preventDefault();
var $div = $(this).closest('div');
// Append the template and replace the id with the existing number of these +1
var id = "select_" + ($("[id^=select_]").length + 1);
var $template = $($('#template').html());
$template.find('select').attr('id', id).attr('name', id);
$div.after($template);
});
});
委派事件处理程序的说明:
他们通过监听指定的事件来冒泡到一个不变的祖先,然后他们应用jQuery选择器,然后他们将函数应用于任何匹配导致事件的元素 。这意味着它们将处理在事件时存在的元素,而不仅仅是在注册时(即“正常”处理程序连接时)。