我已经认识到,当通过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()
方法的简便方法。
问题:
click()
方法不能像在Chrome上那样触发IE上的action方法?click()
方法时,是否有一种方法可以立即触发IE上的action方法,而无需使用警报?对于最后一个问题,您可能想知道为什么,甚至有人想要。
我有一种情况,我想在窗口关闭时运行一个动作方法。
我在JavaScript中使用了beforeunload
方法,但是由于上面提到的事情,动作方法从未在IE上触发过。
另一个问题:
是否可以在IE上的beforeunload
事件内触发操作方法?
答案 0 :(得分:-4)
//试试这个
(function($) {
setTestButtonsOnclickFunctions()
})(jQuery);