我有监听两个事件的文本框和方法。
<textbox id="test" />
@Listen("onOK = #test; onBlur = #test")
public void action(Event event) {
// do something ...
}
当我在文本框中按Enter键时,会触发事件“onOK”。没关系。 但是当我从Texbox失去焦点时,“onBlur”事件也会被触发。这很糟糕,因为在那种情况下我的方法“动作”被调用两次。 如何取消第二次活动?
答案 0 :(得分:1)
如果您不需要在文本框失去焦点时触发事件,则必须删除@Listen("onOK = #test")
public void action(Event event) {
// do something ...
}
部分:
@listen
这是因为在您的代码中,您正在使用anotation onOk
,每次在文本框中使用id =&#34; test&#34;进行以下任何事件:onBlur
或action
(当焦点丢失时触发的事件),然后执行方法onOK
。
<强>更新强>
现在,如果您需要文本框触发onBlur
的事件而另一个事件失去焦点(listen
),那么显然您需要两种不同的方法并将@Listen("onOK = #test")
public void action(Event event) {
// do something when Ok...
}
@Listen("onBlur = #test")
public void anotherAction(Event event) {
// do something when loses focus...
}
标记放入两者都有自己的行为和条件,如下:
img#art {
display: block;
margin-right: auto;
margin-left: auto;
width: 100%;
height: 100%;
max-height: 300px;
z-index: -1;
}
img#raw {
display: block;
margin-left: auto;
z-index: 2;
}
img#law {
display: block;
margin-right: auto;
z-index: 1;
}
答案 1 :(得分:1)
您可以将任何活动转发给其他活动:
我created a fiddle where you can test it。
但有些解释:
在zul:
<textbox id="test" forward="onOK=test.onBlur"/>
什么说onOK将转发给onBlur,稍后它将成为onBlur。
在java代码中:
@Listen("onBlur = #test")
public void action(Event event) {
Clients.showNotification(event.getName() + " " + ++counter);
}
所以现在我们只收听onBlur,因为onOK被转发到onBlur。
这对你的案件有什么帮助,还没有。
不调用事件=&gt;不可能,如果你宣布它,它将被触发 但是你怎么能处理你的情况:
在作曲家中按住字符串,并使用新值进行检查 如果等于=>事件已经触发,或者没有变化 如果它不等于=&gt;做你的东西。