【发布时间】:2019-01-21 05:28:04
【问题描述】:
我已经认识到,当通过 JavaScript 完成点击时,它不会立即在 IE 上触发 action 方法,而是浏览器等待代码完成点击的函数,然后触发 action 方法.
在 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 函数中有一个警报。
它在那里是因为我认识到触发警报时会触发操作方法。
但是没有它,action方法会在onclick函数完成后触发。
还有someRandomVariable 表示当代码通过click() 方法时,操作方法不会在IE 上触发,而是在Chrome 上触发。这使得调试变得容易。
为什么有两个按钮是因为它是测试click() 方法的简单方法。
问题:
- 为什么action方法没有立即在IE上触发?
- 为什么
click()方法在 IE 上不像在 Chrome 上那样触发 action 方法? - 有没有办法在运行
click()方法时立即在IE 上触发action 方法,而不使用警报?
对于最后一个问题,您可能想知道为什么有人甚至想要那个。
嗯,我有一个场景,我想在窗口关闭时运行一个操作方法。
我在 JavaScript 中使用了beforeunload 方法,但由于我上面提到的原因,在 IE 上从未触发过 action 方法。
另一个问题:
有没有办法在 IE 上的 beforeunload 事件中触发操作方法?
【问题讨论】:
-
该代码不会导致点击的无限循环吗? btn1 呼叫 2 和 btn2 呼叫 1,他们会一直互相呼叫......
-
@epascarello 是的,但奇怪的是它没有。但我会因为你的观点而改变问题。
-
你添加了
beforeunload,它改变了原始问题的动态,因为浏览器会使用 beforeunload 杀死东西,因为它们试图让页面快速卸载。所以不,没有办法保证在卸载页面时会进行调用。 -
@epascarello 它不会改变问题的动态,因为无论是否有
beforeunload,它的工作方式都是一样的。 -
@epascarello 我标记了你的评论,因为它可能会误导其他人理解这个问题。
标签: javascript internet-explorer jsf-2 xhtml icefaces