Javascript JS原型中的观察者事件-同时发生两个事件
我有一个输入框,它接受一个在函数opConfig.reloadPrice()中得到验证的数字。我将两个观察者设置为一个相同的元素,在“更改”上,当我在框外单击或使用选项卡(如果已进行更改)时,它将执行代码。在“按键”上,它检查返回键是否被按下,然后执行代码,它还触发“更改”观察者!!因此,在本例中,函数opConfig.reloadPrice()执行了两次(最后我得到了两个相同的警报框)。 我现在拥有的代码:Javascript JS原型中的观察者事件-同时发生两个事件,javascript,events,prototypejs,observer-pattern,Javascript,Events,Prototypejs,Observer Pattern,我有一个输入框,它接受一个在函数opConfig.reloadPrice()中得到验证的数字。我将两个观察者设置为一个相同的元素,在“更改”上,当我在框外单击或使用选项卡(如果已进行更改)时,它将执行代码。在“按键”上,它检查返回键是否被按下,然后执行代码,它还触发“更改”观察者!!因此,在本例中,函数opConfig.reloadPrice()执行了两次(最后我得到了两个相同的警报框)。 我现在拥有的代码: <input type="text" value="" name="option
<input type="text" value="" name="options[1]" id="options_1" onkeypress="return disableEnterKey(event)">
Event.observe($('options_1'), 'change', function(e){
opConfig.reloadPrice();
});
Event.observe($('options_1'),'keypress', function(e){
if (e.keyCode == Event.KEY_RETURN)
opConfig.reloadPrice();
});
干杯,jazkat将输入字段的当前值保存在上限变量(上限值)中 如果某个事件中的值发生更改,则触发处理程序并更新upvalue:
var oldVal;
$('options_1').observe(
'change', function () {
var val = this.value;
if (oldVal !== val) {
oldVal = val;
opConfig.reloadPrice();
}
}
).observe(
'keypress', function(e) {
oldVal = this.value;
if (e.keyCode == Event.KEY_RETURN) {
opConfig.reloadPrice();
}
}
);
此外,您最好删除HTML中的内联侦听器(并且永不再添加它们):
.将输入字段的当前值保存在上限变量(上限值)中 如果某个事件中的值发生更改,则触发处理程序并更新upvalue:
var oldVal;
$('options_1').observe(
'change', function () {
var val = this.value;
if (oldVal !== val) {
oldVal = val;
opConfig.reloadPrice();
}
}
).observe(
'keypress', function(e) {
oldVal = this.value;
if (e.keyCode == Event.KEY_RETURN) {
opConfig.reloadPrice();
}
}
);
此外,您最好删除HTML中的内联侦听器(并且永不再添加它们):
.感谢katspaugh如此快速的响应,但是当做出更改并按下返回键时,它仍然执行两次:更改+选项卡=确定,更改+单击退出=确定,更改+输入=执行两次(不确定)我将其调整为一个工作示例,但是你应该理解这个想法:在每个处理程序中检查/更新一个共享变量。是的,我很感激,但它仍然给了我一个我正试图摆脱的问题——当值被更改并且返回键被单击时,函数被执行两次(从而给我两个弹出窗口)。我想不出任何好的办法来防止这种情况…:-/奇怪。你用什么浏览器登记?在Chrome中,它在我的演示()中只发出一次警报。我使用的是Firefox 3.6和FF 5.0-结果相同。感谢katspaugh的快速响应,但是当做出更改并按下返回键时,它仍然执行两次:change+tab=OK,change+click out=OK,change+enter=执行两次(不确定)。我将它调整为一个工作示例,但是你应该理解这个想法:在每个处理程序中检查/更新一个共享变量。是的,我很感激,但它仍然给了我一个我正试图摆脱的问题——当值被更改并且返回键被单击时,函数被执行两次(从而给我两个弹出窗口)。我想不出任何好的办法来防止这种情况…:-/奇怪。你用什么浏览器登记?在Chrome中,它在我的演示()中只发出一次警报。我使用的是Firefox 3.6和FF 5.0,结果相同。
<input type="text" name="options[1]" id="options_1" />