问题描述
如ScriptUI reference中所述,有两种方法可以在EditText
上实现更改监听器:
editText.onChanging = function() {
...
}
editText.addEventListener('changing',function(event) {
...
})
但是,在对EditText.text
进行编辑后会触发该函数,由于不需要后备选项而又不需要新值,因此会拒绝获得旧文本值的机会。我正在寻找这样的东西:
editText.onChanging = function(oldValue) {
var newValue = this.text
if (!isCorrect(newValue)) {
this.text = oldValue
}
}
解决方法
editText框具有onActivate callback,该元素在获得焦点时触发。如果您在那时存储了editText的当前文本值,那么如果新值无效,则可以将其返回到其原始状态。
请注意,这里可能值得考虑UX —如果输入无效值,并且该值只是还原,则您可能不会意识到它已经这样做了。对于用户而言,这可能非常令人困惑:看起来我输入了一个值,但是什么也没有发生。最好抛出一个错误(例如对话框)或禁用其他控件,例如如果参数不正确,则会使“执行操作”按钮变灰。