XPages-inputtext字段上的onchange事件丢失单击

XPages-inputtext字段上的onchange事件丢失单击,xpages,Xpages,我有一个简单的表单,在inputText类型的字段上有一个onchange事件 单击另一个对象时Onchange事件开始。例如保存按钮 代码将运行,但在保存按钮上的onchange单击将丢失 我附上了一个重现该问题的页面的示例代码 建议 <?xml version="1.0" encoding="UTF-8"?> <xp:view xmlns:xp="http://www.ibm.com/xsp/core"> <xp:div style="p

我有一个简单的表单,在inputText类型的字段上有一个onchange事件

单击另一个对象时Onchange事件开始。例如保存按钮

代码将运行,但在保存按钮上的onchange单击将丢失

我附上了一个重现该问题的页面的示例代码

建议

    <?xml version="1.0" encoding="UTF-8"?>
    <xp:view xmlns:xp="http://www.ibm.com/xsp/core">
    <xp:div style="padding:20px;"></xp:div>
    <xp:button value="Save" id="button1" style="margin:20px;">
    <xp:eventHandler event="onclick" submit="true" refreshMode="complete">
    <xp:this.action><![CDATA[#{javascript:print('click');}]]></xp:this.action>
    <xp:this.script><![CDATA[alert('click');]]></xp:this.script>
    </xp:eventHandler>
    </xp:button>
    <xp:radioGroup id="radioGroup1" style="margin:20px;">
    <xp:selectItem itemLabel="val1"></xp:selectItem>
    <xp:selectItem itemLabel="val2"></xp:selectItem>
    <xp:selectItem itemLabel="val3"></xp:selectItem>
    <xp:eventHandler event="onchange" submit="true" refreshMode="complete">
    <xp:this.action><![CDATA[#{javascript:print('onchange - radiobutton');}]]></xp:this.action>
    </xp:eventHandler>
    </xp:radioGroup>
    <xp:inputText id="inputText1" style="margin:20px;">
    <xp:eventHandler event="onchange" submit="true" refreshMode="complete">
    <xp:this.action><![CDATA[#{javascript:print('onchange - start');
    var millis = 10000;
    var date = new Date();
    var curDate = null;
    do { curDate = new Date(); } 
    while(curDate-date < millis);
    print('onchange - finish');}]]></xp:this.action>
    </xp:eventHandler>
    </xp:inputText>
    </xp:view>

您可以通过
oninput
事件而不是
onchange
来完成。只需更改eventHandler中的事件属性。但是,

  • IE9之前不支持它
  • 每次击键都会触发可能不利于用户体验的事件
  • 在部分刷新的情况下,当刷新结束时,如果不是表单中的第一项,则焦点将转移到另一个组件。同样,对用户体验不利

  • 您还可以在
    onkeyup
    事件上触发CSJS代码,以关注页面上的另一个组件。因此,它将刷新页面。您可以使用
    setTimeout()
    函数执行此操作,因此,如果用户暂时不按任何键,它将触发刷新。

    感谢您的回复,但我认为这些解决方案不适合UX

    我认为唯一可行的解决办法是: 1禁用服务器onchange事件并添加刷新按钮 2尽可能使用onchange客户端js事件

    其他建议