JavaScript 单击函数未立即在 IE 上触发 JSF 操作方法

JavaScript click function not triggering JSF action method immediately on IE

提问人:OuuGiii 提问时间:8/14/2018 最后编辑:OuuGiii 更新时间:8/14/2018 访问量:227

问:

我已经认识到,当通过 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

还有一个显示,当代码传递了该方法时,操作方法不会在 IE 上触发,而是在 Chrome 上触发。这使得调试变得容易。someRandomVariableclick()

为什么有两个按钮,是因为这是测试该方法的简单方法。click()

问题:

  1. 为什么操作方法不会立即在 IE 上触发?
  2. 为什么该方法在 IE 上不像在 Chrome 上那样触发操作方法?click()
  3. 有没有办法在运行方法时立即在 IE 上触发操作方法,而无需使用警报?click()

对于最后一个问题,你可能想知道为什么有人会想要那个。

好吧,我有一个场景,我想在窗口关闭时运行一个操作方法。
我在 JavaScript 中使用该方法,但由于我上面提到的原因,操作方法从未在 IE 上触发。
beforeunload

另一个问题:

有没有办法在IE上的事件中触发操作方法?beforeunload

JavaScript 互联网浏览器 JSF-2 XHTML 冰面

评论

0赞 epascarello 8/14/2018
该代码不会导致无限循环的点击吗?BTN1 呼叫 2 个,BTN2 呼叫一个,它们只会继续互相呼叫......
0赞 OuuGiii 8/14/2018
@epascarello真的,但奇怪的是事实并非如此。但我会因为你的观点而改变这个问题。
0赞 epascarello 8/14/2018
您添加了这改变了原始问题的动态,因为浏览器会使用 beforeunload 杀死东西,因为它们试图使页面快速卸载。所以不,没有办法保证在卸载页面时会进行调用。beforeunload
0赞 OuuGiii 8/14/2018
@epascarello它不会改变问题的动态,因为如果有或没有,它的工作方式相同。beforeunload
0赞 OuuGiii 8/16/2018
@epascarello 我标记了您的评论,因为它可能会误导其他人理解这个问题。

答:

-4赞 pixellab 8/14/2018 #1

试试这个

(function($) {   

setTestButtonsOnclickFunctions()

})(jQuery);

评论

1赞 OuuGiii 8/14/2018
这个答案只是抛出一个错误。也许缺少“;”?我不认为这是IE以不同方式运行的原因。
0赞 epascarello 8/14/2018
所以你删除了文件准备好了吗?为什么。。。。没有任何意义,它会有什么不同。