У меня есть список кнопок для внесения изменений в форум (каждая кнопка содержит уникальное значение атрибута data-mod). Я написал сценарий jquery для обработки последней нажатой кнопки и отправлю ее значение обработчику базы данных php через ajax, который также отправляет настраиваемое оповещение о том, действительно ли модератор хочет выполнить действие или нет (если нет, предупреждение закрывается и ничего не происходит , иначе вызывается функция обратного вызова).jQuery click event weird behavior
Однако, я испытываю странное поведение с этим скриптом, который считает, что, несмотря на то, что я отменяю подтверждение, следующее подтвержденное предупреждение активирует функцию обратного вызова в зависимости от того, сколько раз я нажал кнопки. Я хочу, чтобы функция обратного вызова запускалась один раз с последним подтвержденным действием.
$(function() {
var btn;
// Custom callback function
function callback(clicked) {
$("#result").append("<br/>").append(clicked);
}
// Custom alert function
var alert = {
Check: function(fnc, clicked) {
$("#alert").show();
$("[data-alert=1]").click(function() {
fnc(clicked);
alert.Close();
});
$("[data-alert=0]").click(function() {
alert.Close();
});
},
Close: function() {
$("#alert").hide();
return false;
}
};
// Custom button function
$("[data-mod]").click(function() {
btn = $(this);
return alert.Check(callback, btn.data("mod"));
})
});
Если описание ошибки не было достаточно ясно, что я написал упрощенную скрипку, так что вы можете вносить изменения в код: here.
Кроме того, если ошибка кажется немного запутанным, вот картина воспроизводства: I want only the last clicked button with the "Yes" confirmation button pressed
Заранее спасибо!
Я смущен. В сценарии реального мира предупреждения загружаются на страницу динамически, с функцией загрузки (шаблон поступает из внешнего файла). С другой стороны, я обновил скрипку, так что она использует .one для кнопки предупреждения, которая вызывает https://jsfiddle.net/fq2mmzfq/1/, по-прежнему такую же ошибку, можете ли вы изменить скрипку? –
@MateusMelo ответ и скрипка отредактированы. – coyotte508
Другое дело, поскольку вы удалили функцию изнутри переменной предупреждения, пользовательская функция обратного вызова теперь ограничивается только обратным вызовом(), которая, если я собираюсь повторно использовать оповещение для другой функции обратного вызова, например somethingElse() это не сработало –