JavaScript点击功能未立即在IE

时间:2018-08-14 11:08:20

标签: javascript internet-explorer jsf-2 xhtml icefaces

我已经认识到,当通过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()方法不能像在Chrome上那样触发IE上的action方法?
  3. 运行click()方法时,是否有一种方法可以立即触发IE上的action方法,而无需使用警报?

对于最后一个问题,您可能想知道为什么,甚至有人想要。

我有一种情况,我想在窗口关闭时运行一个动作方法。
我在JavaScript中使用了beforeunload方法,但是由于上面提到的事情,动作方法从未在IE上触发过。

另一个问题:

是否可以在IE上的beforeunload事件内触发操作方法?

1 个答案:

答案 0 :(得分:-4)

//试试这个

(function($) {   

setTestButtonsOnclickFunctions()

})(jQuery);