Проблема в том, что вы пытаетесь добавить событие (ваше click
) к кнопке, которой пока нет в вашем документе, потому что она динамическая.
Таким образом, ваше решение может быть найденоздесь => Привязка события к динамически создаваемым элементам?
Технически это дублирующий вопрос , но поскольку вы пишете код, который слишком сложен для того, что он имеетЧтобы сделать это, я пытаюсь указать вам гораздо более простой способ.
Вы добавляете много append
& addClass
, которые создают рекурсивный и грязный код. Решением, делающим его более сухим, может быть использование одной переменной со всеми вашими кнопками и добавление только этого.
var row="";
row+="<div class='attraction'>";
row+="<p>" + itineraryInput + "</p>";
row+="<button class='newButton review'>Add to leave a review</button>";
row+="<button class='newButton doSomething'>Do something</button>";
row+="<button class='newButton deleteButton'>Remove itinerary</button>";
row+="</div>";
$("#first").prepend(row);
После этого вы можете использовать решение, которое я разместил перед вами, чтобы добавить событие для удалениякнопка:
$(document).on("click", ".deleteButton", function() {
$(this).closest(".attraction").remove();
});
Для добавления других событий к другим кнопкам используется та же техника.
Это ваш код в действии с работающими кнопками удаления:
$("#search-submit").on("click", function() {
var itineraryInput = $("#search").val();
var row="";
row+="<div class='attraction'>";
row+="<p>" + itineraryInput + "</p>";
row+="<button class='newButton review'>Add to leave a review</button>";
row+="<button class='newButton something'>Do something</button>";
row+="<button class='newButton deleteButton'>Remove itinerary</button>";
row+="</div>";
$("#first").prepend(row);
})
$(document).on("click", ".deleteButton", function() {
$(this).closest(".attraction").remove();
});
.newButton {
width: 33%;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="map" style="height: 100%"></div>
<div class="row mb-2">
<div class="col">
<input type="text" class="form-control" id="search" placeholder="Search for an attraction...">
<button id="search-submit" class="btn btn-lg pull-right">Add To Your Itinerary!</button>
</div>
</div>
<div class="trans_container">
<div id="trans_first"></div>
<div id="trans_second"></div>
</div>
<div class="acontainer">
<div id="first"></div>
<div id="second"></div>
<div id="clear"></div>
</div>
Редактировать 1 Я отвечаю на ваш комментарий.
Вы можете использовать appendTo
для .. . добавлять контент куда угодно с помощью jQuery. Я публикую вам пример. В этом случае я беру свой маршрут и помещаю его в div #second
, нажимая кнопку с именем « Append to # second ». (В вашем комментарии вы забыли точку (.
) до something
(потому что something
- это класс, возможно, это была проблема):
$(document).on("click", ".something", function() {
/* ^^^ write a dot here */
$("div").appendTo("#second");
});
$("#search-submit").on("click", function() {
var itineraryInput = $("#search").val();
var row="";
row+="<div class='attraction'>";
row+="<p>" + itineraryInput + "</p>";
row+="<button class='newButton review'>Add to leave a review</button>";
row+="<button class='newButton something'>Append to #second</button>";
row+="<button class='newButton deleteButton'>Remove itinerary</button>";
row+="<div class='green'></div>";
row+="</div>";
$("#first").prepend(row);
})
$(document).on("click", ".deleteButton", function() {
$(this).closest(".attraction").remove();
});
$(document).on("click", ".something", function() {
var parent=$(this).closest(".attraction");
$("p", parent).appendTo("#second");
});
.newButton {
width: 33%;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="row mb-2">
<div class="col">
<input type="text" class="form-control" id="search" placeholder="Search for an attraction...">
<button id="search-submit" class="btn btn-lg pull-right">Add To Your Itinerary!</button>
</div>
</div>
<div class="trans_container">
<div id="trans_first"></div>
<div id="trans_second"></div>
</div>
<div class="acontainer">
<div id="first"></div>
<div id="second"></div>
<div id="clear"></div>
</div>