2014-09-12 77 views
0

我有一个类型为inputText的字段上的onchange事件的简单表单。XPages - 输入文本字段丢失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> 

回答

0

您可以通过oninput事件,而不是onchange做到这一点。只需更改eventHandler中的事件属性即可。然而,

  1. 这不是IE9之前的支持,
  2. 每个按键都会触发其能够为用户体验不好的情况下
  3. 在局部刷新的情况下,当刷新结束后,焦点将如果它不是表单中的第一项,则转移到另一个组件。再次,对用户体验不利。

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

0

感谢您的回复,但我认为这些解决方案对于用户体验不佳。

我认为唯一可能的解决方案是:onchange事件 1种禁用服务器,并添加刷新按钮 2时可能使用的onchange客户端的js事件

其他建议?