Когда вызов Ajax успешный, пользователь перенаправляется на главную страницу:
$('#button_1').on('click', function () {
//code
$.ajax({
method: "POST",
url: "/somewhere",
data: {
//code
}
}).done(function () {
location.href = "/";
});
});
После перенаправления я хочу автоматически нажать другую кнопку, которая откроет модальный. Я пробовал внутри done
различные методы:
.done(function () {
location.href = "/";
$('#button_2').click(); // doesn't work
});
.done(function () {
location.href = "/";
setTimeout(function ()
$('#button_2').click(); // doesn't execute
}, 2000);
});
.done(function () {
location.href = "/";
$(document).ready( function () {
// executes but user is immediately redirected to main page
$('#button_2').click();
});
});
Я также попытался за пределами Ajax, в функции, в которой находится вызов Ajax, но имел те же результаты.
Как я могу нажать кнопку программно после вызова Ajax?
Спасибо за ответ. Я исследовал немного больше и нашел другой способ сделать это:
$('#button_1').on('click', function () {
sessionStorage.setItem("reload", "true");
//code
$.ajax({
method: "POST",
url: "/somewhere",
data: {
//code
}
}).done(function () {
location.reload();
});
});
И на главной странице:
$(document).ready(function () {
var reload = sessionStorage.getItem("reload");
if (reload == "true") {
$("#button_2").click();
sessionStorage.setItem("reload", false);
}
});
Вам нужно добавить эту логику на целевую (главную) страницу.
После перенаправления текущая страница больше не активна, и вся логика удаляется.
Вы можете добавить некоторый параметр в URL-адрес, чтобы знать, когда вы там, из-за перенаправления, что-то вроде:
location.href="/?redirect=1"
и затем проверьте этот параметр
Строки кода рядом с
location.href = "/";
не будет выполнен, потому что браузер переходит на другую страницу.
Поэтому вы должны поместить свою логику в /
page (#button_2
должна быть на этой странице).
В настоящее время вы пытаетесь выполнить код после перенаправления, что невозможно сразу, потому что код после location.href= "/"
никогда не будет достигнут. После перенаправления у вас есть новая страница с ясным состоянием.
Ваша текущая функция все еще может выглядеть так:
$('#button_1').on('click', function () {
$.ajax({
method: "POST",
url: "/somewhere",
data: {
//code
}
}).done(function () {
location.href = "/?modal-open=1";
});
});
Как вы можете видеть, я добавил параметр запроса в перенаправление, чтобы мы знали, что мы перенаправлены с намерением открыть модальный.
Для вашей корневой страницы (/
) вам понадобится такой скрипт:
$(document).ready( function () {
// check the URL for the modal-open parameter we've just added.
if(location.search.indexOf('modal-open=1')>=0) {
$('#button_2').click();
}
});
Это проверит, находится ли этот параметр в URL-адресе и запускается щелчок.
Прежде всего, когда вы перенаправляете новую страницу, вы не можете получить доступ к DOM, потому что страница перезагружается. Вы можете отправить параметр для этого.
$(document).ready( function () {
//after page load
var isButtonActive = findGetParameter("isButtonActive");
if(isButtonActive){
alert("button_2 activated");
$('#button_2').click();
}
$('#button_1').on('click', function () {
//code
$.ajax({
method: "POST",
url: "/somewhere",
data: {
//code
}
}).done(function () {
alert("page will be reload. button_2 wil be activated");
location.href = "/?isButtonActive=true";
});
});
$('#button_2').on('click', function () {
alert("button_2 clicked");
});
});
function findGetParameter(parameterName) {
var result = null,
tmp = [];
location.search
.substr(1)
.split("&")
.forEach(function (item) {
tmp = item.split("=");
if (tmp[0] === parameterName) result = decodeURIComponent(tmp[1]);
});
return result;
}
success:
атрибут в ajax$('#button_2')
на странице/
?