У меня есть эта, по-видимому, «простая» задача, которая абсолютно пинает меня в задницу.
Моя цель состоит в том, чтобы, когда пользователь щелкает ссылку, я запрещаю использование по умолчанию, запускаю на нем функцию ajax и затем переходу по этой ссылке (т. Е. Возобновить работу по умолчанию). Единственное, что я могу заставить работать, — это захватить href ссылки и затем следовать с помощью window.location — это не идеально, так как он не определяет, решил ли пользователь открыть в новом окне / вкладке или в то же самое окно / вкладка; также я думаю, что должен быть лучший путь.
Однако происходит то, что по умолчанию это предотвращается, функция AJAX запускается, но затем ссылка не отслеживается. То, что я спрашиваю: как смоделировать ссылку нажмите после функция запустилась?
HTML
<a href="some_href" data-id="789">This is the link</a>
JQuery
$(document).on('click', 'a', function(e, options){
// setup our options
options = options || {};
// get some details from the link
var this_href = $(this).attr('href');
var this_id = $(this).data('id');
// if options aren't set and this link has a data-id attribute
if(!options.stuff_done && $(this_id).length){
e.preventDefault(); // prevent link following
// run some ajax
$.ajax({
url: myAjax.ajax_url,
type: 'post',
data: {
action : 'a_php_function',
post_id : this_id
},
success: function(response) {
// do stuff
}).then(function(){
$(this).trigger('click', { stuff_done: true });
});
} else {
// else if it doesn't have a data-id, do default
}
});
Контекст: Проверка наличия значения (‘data-id’) в массиве с использованием PHP / AJAX и удаление его. Этот идентификатор данных относится к идентификатору записи в WordPress и должен быть удален, когда пользователь переходит по ссылке на эту запись.
Следовательно — пользователь нажимает на ссылку, data-id проверяется, удаляется / не удаляется из массива, ссылка следует.
Сначала дайте вашему href идентификатор, например, так:
<a href="some_href" data-id="789" id='#some-link'>This is the link</a>
Затем смоделируйте щелчок мышью в своей части успеха ajax:
...
success: function(response) {
$('#some-link').click();
})
...
Вы можете изучить response
до срабатывания клика. Кроме того, я не думаю, что вам нужно .then
и все такое.
Других решений пока нет …