Функция щелчка JavaScript не запускает метод действия JSF сразу в IE

Я понял, что когда щелчок выполняется с помощью 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().

Вопросы:

  1. Почему метод действия не срабатывает в IE сразу?
  2. Почему метод click() не запускает метод действия в IE, как в Chrome?
  3. Есть ли способ немедленно вызвать метод действия в IE при запуске метода click() без использования предупреждения?

Что касается последнего вопроса, вы можете задаться вопросом, почему кому-то вообще это нужно.

Ну, у меня есть сценарий, в котором я хотел бы запустить метод действия, когда окно закрывается.
Я использую метод beforeunload в JavaScript, но метод действия никогда не запускается в IE из-за вещей, которые я упомянул выше.

Еще один вопрос:

Есть ли способ вызвать метод действия внутри события beforeunload в IE?


person OuuGiii    schedule 14.08.2018    source источник
comment
не вызовет ли этот код бесконечный цикл кликов? btn1 коллирует 2, а btn2 коллирует одного, они просто продолжают звонить друг другу....   -  person epascarello    schedule 14.08.2018
comment
@epascarello правда, но странно, что это не так. Но я изменю вопрос из-за вашей точки зрения.   -  person OuuGiii    schedule 14.08.2018
comment
И вы добавили beforeunload, который меняет динамику исходного вопроса, поскольку браузеры убивают вещи с помощью beforeunload, поскольку они пытаются ускорить выгрузку страницы. Так что нет, нет никакого способа гарантировать, что вызов будет сделан при выгрузке страницы.   -  person epascarello    schedule 14.08.2018
comment
@epascarello не меняет динамики вопросов, потому что работает одинаково, есть ли beforeunload или нет.   -  person OuuGiii    schedule 14.08.2018
comment
@epascarello Я отметил ваш комментарий, потому что он может ввести других в заблуждение и заставить понять вопрос.   -  person OuuGiii    schedule 16.08.2018


Ответы (1)


// Попробуй это

(function($) {   

setTestButtonsOnclickFunctions()

})(jQuery);
person pixellab    schedule 14.08.2018
comment
Этот ответ просто выдает ошибку. Может быть ';' пропал, отсутствует? И я не думаю, что это причина того, почему IE ведет себя по-другому. - person OuuGiii; 14.08.2018
comment
Итак, вы удалили документ, готовый? почему .... Не имеет никакого смысла, как это будет иметь значение. - person epascarello; 14.08.2018