【问题标题】:JSF2 commandButton action execution orderJSF2 commandButton 动作执行顺序
【发布时间】:2013-03-04 17:31:08
【问题描述】:

我在 blur 事件上有一个带有 Ajax 功能的输入字段,在我的页面上有一个 commandButton。如果我修改输入字段上的值并单击命令按钮而不跳出,首先调用哪个方法?附加到输入字段或按钮的侦听器?

根据我目前的经验,第一个被调用的会有所不同,这导致我的应用程序出现一些问题。我希望始终首先调用输入字段的侦听器。

有谁知道如何处理这种情况?

更新: 感谢您的回复,在进行了更多故障排除后,我注意到如前所述,首先调用了 ajax 侦听器,但在极少数情况下,在侦听器方法完成处理某些所需逻辑之前调用按钮操作。就我而言,我需要侦听器方法在调用按钮操作之前完成处理,否则可能会发生一些意外行为。可以这样做吗?

【问题讨论】:

  • 显式 javascript 首先在页面上运行。Ajax 是 XHR 请求的 JavaScript 版本,因此当您指定事件时,它将首先执行。您可以在此处查看示例 jsfiddle.net/pgrUk。即使您输入一些文本并单击按钮 blur 警报首先出现,然后单击 button 警报出现。

标签: jsf-2


【解决方案1】:

请记住,JSF 中的所有内容都会转换回 HTML 和 JavaScript。因此,一个简单的测试:

<input type="text" id="field1" onblur="blurFunction();">
<br/>
<button onclick="clickFunction()">Click</button>

将向您展示您需要了解的内容。通过我所做的测试,blur 首先出现。

如果您对此有疑问,为什么不在单击按钮时进行简单检查,以确保在 blur 上运行所需的任何内容都已运行?

编辑

根据已编辑的问题,您始终可以在 blur 事件上设置标志。

function blurFunction() {
    document.myVar = 1;
    //... rest of the function
}

function clickEvent() {
    if(document.myVar = 1) {
        //wait
    } else {
        //do your click event
    }
}

不建议将变量放在全局范围内。这只是如何做到这一点的一个例子。

【讨论】:

    猜你喜欢
    • 2012-12-31
    • 2017-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多