Проблема заключается в том, что вы прикрепляете к кнопке новый обработчик события click
каждый раз, когда отображается модальный режим. Переместите этот лог c за пределы функции.
Единственная проблема заключается в том, что вам нужно будет передать переменную func
через функцию OpenConfirmPopup()
в обработчик щелчков. Это можно сделать с помощью атрибута data()
элемента:
function OpenConfirmPopup(title, msg, func) {
var $modal = $('#confirmModal');
$modal.find('.modal-title').text(title);
$modal.find('.modal-body').text(msg);
$modal.find('.btn-confirm').data('func', func);
$modal.modal('show');
}
jQuery($ => {
$('.btn-confirm').click(function() {
var args = new Array();
for (var i = 1; i < arguments.length; i++)
args.push(arguments[i]);
window[$(this).data('func')].apply(this, args);
});
});
Я бы также поставил под сомнение цель создания массива args
из arguments
. Два массива будут идентичны, поэтому просто предоставьте аргументы прямо:
$('.btn-confirm').click(function() {
window[$(this).data('func')].apply(this, arguments);
});
Если вы делаете это для клонирования массива, используйте slice()
:
$('.btn-confirm').click(function() {
window[$(this).data('func')].apply(this, arguments.slice(0));
});
Или распространяйте синтаксис (если нацеливаемые вами браузеры поддерживают ES6):
$('.btn-confirm').click(function() {
window[$(this).data('func')].apply(this, [...arguments]);
});