Я понял, что когда щелчок выполняется с помощью JavaScript, он не сразу запускает метод действия в IE, вместо этого браузер ждет, пока код не пройдет через функцию, в которой выполняется щелчок, и после этого запускает метод действия.
В Chrome метод действия запускается сразу после выполнения клика.
Вот пример xhtml-кода:
<h:form>
<ace:pushButton id="button1" action="#{someBean.someFunction1}" label="Button1" />
</h:form>
<h:form>
<ace:pushButton id="button2" action="#{someBean.someFunction2}" label="Button2" />
</h:form>
<h:form>
<ace:pushButton id="button3" action="#{someBean.someFunction3}" label="Button3" />
</h:form>
<h:form>
<ace:pushButton id="button4" action="#{someBean.someFunction4}" label="Button4" />
</h:form>
А вот пример кода javaScript:
function setTestButtonsOnclickFunctions() {
var button1 = document.querySelector('[id*="button1_button"]');
var button2 = document.querySelector('[id*="button2_button"]');
var button3 = document.querySelector('[id*="button3_button"]');
var button4 = document.querySelector('[id*="button4_button"]');
button1.onclick = function() {
button2.click();
var someRandomVariable = 10;
};
button2.onclick = function() {
var someRandomVariable = 10;
};
button3.onclick = function() {
button4.click();
alert("Button 4 clicked in JavaScript");
var someRandomVariable = 10;
};
button4.onclick = function() {
var someRandomVariable = 10;
};
}
(function($) {
$(document).ready(setTestButtonsOnclickFunctions);
})(jQuery);
Примечание.
Как видите, в функции button3 onclick есть оповещение.
Оно здесь, потому что я понял, что при срабатывании оповещения запускается метод действия.
Но без него метод действия запускается после onclick
функция завершена.
Также есть someRandomVariable
, чтобы показать, что когда код передает метод click()
, метод действия не запускается в IE, но запускается в Chrome. Это упрощает отладку.
Почему есть две кнопки, потому что это простой способ протестировать метод click()
.
Вопросы:
- Почему метод действия не срабатывает в IE сразу?
- Почему метод
click()
не запускает метод действия в IE, как в Chrome? - Есть ли способ немедленно вызвать метод действия в IE при запуске метода
click()
без использования предупреждения?
Что касается последнего вопроса, вы можете задаться вопросом, почему кому-то вообще это нужно.
Ну, у меня есть сценарий, в котором я хотел бы запустить метод действия, когда окно закрывается.
Я использую метод beforeunload
в JavaScript, но метод действия никогда не запускается в IE из-за вещей, которые я упомянул выше.
Еще один вопрос:
Есть ли способ вызвать метод действия внутри события beforeunload
в IE?
beforeunload
, который меняет динамику исходного вопроса, поскольку браузеры убивают вещи с помощью beforeunload, поскольку они пытаются ускорить выгрузку страницы. Так что нет, нет никакого способа гарантировать, что вызов будет сделан при выгрузке страницы. - person epascarello   schedule 14.08.2018beforeunload
или нет. - person OuuGiii   schedule 14.08.2018