#javascript #jquery #html #javascript-events
#javascript #HTML #jquery #jquery-события
Вопрос:
У меня есть div, который содержит пример таблицы с одним TR
<div>
<table id="sample_row" style="width:300px">
<tr>
<td>
<select id="employer">
<option value="1">Employer 1</option>
<option value="2">Employer 2</option>
<option value="3">Employer 3</option>
<option value="4">Employer 4</option>
</select>
</td>
<td>
<select id="location">
<option value="1">Location 1</option>
<option value="2">Location 2</option>
<option value="3">Location 3</option>
<option value="4">Location 4</option>
</select>
</td>
<td><input type="text" name="fname" id="subArea"></td>
<td>
<select id="employeeType">
<option value="1">Part Time</option>
<option value="2">Leased</option>
<option value="3">Temporary</option>
<option value="4">Full Time</option>
</select>
</td>
<td><input type="button" value="Save" id="save" class="save"></td>
<td><input type="button" value="Cancle" id="cancle"></td>
</tr>
</table>
</div>
Ниже приведена моя функция jQuery
<script>
$( document ).ready(function() {
$("#save").on("click", function(){
alert("##");
});
$("#add").click(function(){
var tr =$("#sample_row tr:first").clone();
$('#services_list tbody').prepend('<tr />').children('tr:first').replaceWith(tr);
});
});
</script>
Строка добавлена успешно, но .on
событие не работает с новой добавленной кнопкой с tr?
Комментарии:
1. Что именно не работает ..? что ты пытаешься сделать ..? где
#services_list
? Где#add
?2. какую версию jquery вы используете?
3. @Pbk1303 jquery-1.11.1.min
4. @TilwinJoy Я не упомянул #services_list
5. @ShahidGhafoor Это прямо в вашем коде.
Ответ №1:
Проблема в том, что вам нужно делегировать родительскому элементу в DOM для будущих добавленных элементов. Также следует исправить тот факт, что вы не должны дублировать идентификаторы.
Функция .on может делегировать родительским элементам, чтобы будущие добавленные элементы могли быть привязаны. Второй параметр в инструкции on() ниже позволяет мне привязать событие щелчка к #samle_row и делегировать целевой элемент «.save»
$("#sample_row").on("click",".save",function(){
alert("##");
});
Ответ №2:
Мощность on
события — это второй параметр, в противном случае он такой же, как обработчик щелчков.
$(document).on("click", ".save", function(){
alert("##");
});
Приведенный выше код проверит событие щелчка внутри документа, и если целевой элемент является #save
, он вызовет событие.
Всегда используйте class, когда вы думаете о нескольких элементах, не используйте ID в этом случае.
Комментарии:
1. Возможно, вы бы расширили это, чтобы объяснить, «почему» этот ответ должен решить его проблему…
2.
id
оно должно быть уникальным. Это было бы хорошо для одной строки, но если их несколько, вы захотите использовать.save
вместо этого селектор класса.3. Я знаю, что вы можете использовать один и тот же идентификатор во всем вашем документе. Однако это неправильно. Вы не должны. Идентификаторы должны быть уникальными для одного элемента.
4. @War10ck Да, вы правы. так и должно быть, но я просто хочу сказать, что это будет работать в jquery при событии. однако позвольте мне изменить его на class
5. @RashminJaviya Спасибо за изменение. 1 🙂
Ответ №3:
Используйте следующее
$("body").on("click", ".save", function(){
alert("##");
});
Вы даже можете заменить body
на #sample_row
🙂
Комментарии:
1. Во-первых, клонирующая часть его кода не будет работать. следовательно, это решение бесполезно.
2. -1 просто из-за дублированных
id
‘s, которые будут привязаны к . Вы должны привязаться к.save
селектору, посколькуid
он должен быть уникальным для одного и только одного элемента. Я удалю свой downvote, если будет исправлено неправильное использованиеid
‘s.3. @ Tilwin Joy простите меня, я не могу понять, что вы хотите передать?
4. Да, полностью согласен с War10ck, должен быть только один идентификатор, обновленный ответ 🙂
Ответ №4:
Попробуйте это
$('body')
.on('click', '.save', function (event) {
alert("##");
})
.on('click', '#add', function (event) {
var tr =$("#sample_row tr:first").clone();
$('#services_list tbody').prepend('<tr />').children('tr:first').replaceWith(tr);
}
);
Комментарии:
1. Часть клонирования была описана автором как «рабочая». Поэтому оно было скопировано.