#javascript #jquery #html #confirm
#javascript #jquery #HTML #подтвердите
Вопрос:
Я использую https://craftpip.github.io/jquery-confirm / плагин. Мне нужно иметь возможность выбирать уникальные идентификаторы элементов, которые были динамически загружены из базы данных.
<div><a id="1" href="1">1</a></div>
<div><a id="2" href="2">2</a></div>
<div><a id="3" href="2">3</a></div>
Jquery
$('#1').confirm({
title: 'Confirm!',
content: 'Are you sure you want to delete!',
confirm: function(){
console.log(this.content);
},
cancel: function(){
$.alert('Canceled!')
}
});
Мой вопрос в том, как я могу выбрать идентификатор элемента при нажатии. Я знаю, как это сделать с помощью простого JavaScript. Немного больше информации о том, что я пытаюсь сделать. Это записи в блоге, генерируемые динамически из базы данных. Каждый div представляет сообщение в блоге, а <a>
тег представляет значок, который при нажатии вызывает ajax для удаления этого сообщения в блоге. После подтверждения, что вы действительно хотите удалить.
В JavaScript я бы сделал что-то вроде этого.
<div><a id="1" href="1" onclick="many(this.id)">1</a></div>
<div><a id="2" href="2" onclick="many(this.id)">2</a></div>
<div><a id="3" href="2" onclick="many(this.id)">3</a></div>
сценарий
function many(id)
{
///ajax call
}
Мне просто не нужно поле подтверждения JavaScript по умолчанию, поэтому я использую плагин jQuery.
Также пытался сделать что-то подобное, но jQuery не работает внутри функции JavaScript
function many(id)
{
$('#' id).confirm({
title: 'Confirm!',
content: 'Are you sure you want to delete!',
confirm: function(){
console.log(this.content);
},
cancel: function(){
$.alert('Canceled!')
}
});
}
PHP во время цикла
<?php while ($row = $result->fetch()){ ?>
<article id="<?php echo $row['article_id'];?>">
<div class="body>
<h1><?php echo $row['title'];?></h1>
<p><?php echo $row['article'];?></p>
<div><a id="<?php echo $row['article_id'];?>" class="delete">x</a></div>
</div>
</article>
<?php }?>
Это то, что в итоге сработало для меня.
$('.someClass').click( function(event) {
var ele = $(this).attr('rel');
// ele is the element you clicked on
$.confirm({
title: 'Delete!',
content: 'Are you sure you want to delete!',
confirm: function(){
var dataString = "blogpost=" ele;
$.ajax({
type: "POST",
url: "http://localhost/new12/scripts/delete_blog_ajax.php",
data: dataString,
cache: false,
success: function(html)
{
if(html)
{
$("#aid" ele).fadeOut('slow', function(){
$(this).remove();
});
return false;
}
}
});
return true;
},
cancel: function(){
$.alert('Canceled!')
}
});
});
После подтверждения нажатия я выполняю вызов Ajax. При успешном выполнении он удаляет исчезающий элемент и с помощью функции обратного вызова удаляет элемент из DOM.
Спасибо всем, кто пытался помочь.
Комментарии:
1. как генерируются div? Они жестко закодированы как html или сгенерированы php (что вы не показали)?
2. Они поступают из результатов цикла while из базы данных.
3. Можете ли вы показать php-код для этого? Был ли ответ Дэна Дефа уже решением, которое сработало для вас?
4. хорошо, я отредактирую, чтобы показать код php
5. но если ваша проблема решена с помощью ответа Дэна Дефа (что хорошо), вам это больше не нужно.
Ответ №1:
Я думаю, вы спрашиваете, как вызвать .confirm()
элемент, на который нажат? Попробуйте это, вам не нужно знать идентификатор, потому что внутри функций обратного вызова в обработчиках событий jquery this
ссылается на элемент, на котором было запущено событие.
$('a').click(function () {
$(this).confirm({
title: 'Confirm!',
content: 'Are you sure you want to delete!',
confirm: function(){
console.log(this.content);
},
cancel: function(){
$.alert('Canceled!')
}
})
});
Я бы добавил, однако, что Дэн Деф прав в том, что вы, вероятно, захотите обернуть эти элементы в окружение div
, чтобы не добавлять обработчик кликов к каждому a
тегу на странице. Таким образом, в этом случае, вместо $('a').click(...)
приведенного выше фрагмента, это будет $('#divId').find('a').click(...)
Комментарии:
1. В ответе Дэна Дефа просто вызывается функция
confirm
, переданная в качестве обратного вызова обработчику событий. Это не будет волшебным образом работать само по себе и предполагает, чтоconfirm
была определена вызываемая функция, которая принимает событие в качестве параметра и вызывает функцию плагина jquery для целевого события. Этот факт не обязательно понятен новичку, тем более чтоconfirm
совпадает с именем функции плагина jquery, используемой OP, что делает его вдвойне запутанным. Мой ответ дополняет ответ Дэна Дефа, предоставляя полный рабочий пример и некоторые дополнительные пояснения.2. Нет, я открыт для любых других предложений о том, как реализовать окно подтверждения, особенно если оно находится в чистом JavaScript.
3. Какая часть этого не работает? Есть ли ошибка консоли? Если вам не нужно использовать плагин подтверждения jquery, просто замените все внутри функции click на
if (confirm('Are you sure you want to delete!')){ //insert delete logic here }
Нет причин, по которым вы не можете использовать стандартный javascriptconfirm
из обработчика событий jquery. Если вам нужно получить идентификатор выбранного элемента изif
инструкции, просто используйтеthis.id
4. в логотипе консоли нет ошибок. Плагин не работает. НЕТ окна предупреждения. Да, я уже делал чистый JavaScript раньше. Это просто не так красиво. Искал другие варианты.
5. Если что-нибудь плохое, просто сделайте это с помощью чистого JavaScript. Оставьте это на потом.
Ответ №2:
Вы можете поместить сгенерированные элементы div в другой контейнер, а затем сделать что-то вроде:
$('#MyContainer').find('a').on('click', confirm)
Редактировать: для наглядности функция подтверждения будет выглядеть следующим образом:
function confirm(event) {
$.confirm({
title: 'Confirm!',
content: 'Are you sure you want to delete!',
confirm: function(){
console.log(this.content);
},
cancel: function(){
$.alert('Canceled!')
}
});
}
Комментарии:
1. @jeff да, ты прав, я не видел, чтобы он это уже делал. Я изменил свой ответ.
Ответ №3:
Вам нужен множественный селектор … примером может быть…:
$('#1, #2, #3').on('click', confirm);
https://api.jquery.com/multiple-selector/
var confirm = $.confirm({
title: 'Confirm!',
content: 'Are you sure you want to delete!',
confirm: function(){
console.log(this.content);
},
cancel: function(){
$.alert('Canceled!')
}
});
Комментарии:
1. Итак, html — это, по сути, просто пример, это сообщение в блоге из базы данных с уникальными идентификаторами сообщений в блоге, поэтому на странице может быть много результатов.