如何监听ExtJS中文本字段的用户编辑,而不是程序编辑
How to listen for user edits but not programmatic edits for textfield in Ext JS?
我在TextField上为change
事件添加了一个监听器。当用户更改文本字段中的值时,我的侦听器将获得控制权。这太棒了。
在某些情况下,我希望恢复侦听器中的旧值。但是,当我在侦听器中调用setValue
方法时,change
事件再次触发。在不再次触发事件的情况下,以编程方式恢复旧值的最佳方法是什么?
您可以在TextField
上设置标志,指示您通过程序更改值。例如:
new Ext.form.TextField({
renderTo: 'container',
listeners: {
change: function(sender, newValue, oldValue) {
if (this.restoringValue) {
return;
}
if (newValue == 'XXX') {
this.restoringValue = true;
this.setValue(oldValue);
delete this.restoringValue;
}
}
},
value: 'XXX'
});
如果您在变更监听器上没有任何缓冲区或延迟,那么它应该可以工作。
编辑事件处理程序以查看函数的caller
。基于此,退出事件处理程序。
请参阅:如何获取调用方事件和dom元素id
setRawValue(对象值):对象
直接设置字段的原始值,绕过值转换、更改检测和验证。http://docs.sencha.com/ext-js/4-0/#/api/Ext.form.field.Base-method-setRawValue
我找到了一个解决方案来停止checkChange事件,它是checkChange事件查找的字段上的一个属性。是
field.suspendCheckChange=true
这是因为setValue方法触发的checkChange函数是
checkChange: function() {
var me = this,
newVal, oldVal;
if (!me.suspendCheckChange) {
newVal = me.getValue();
oldVal = me.lastValue;
if (!me.isDestroyed && me.didValueChange(newVal, oldVal)) {
me.lastValue = newVal;
me.fireEvent('change', me, newVal, oldVal);
me.onChange(newVal, oldVal);
}
}
},
这是在5.1中,不确定是否是早期版本。。
http://docs.sencha.com/extjs/5.1/5.1.1-apidocs/source/Field.html#Ext-表单字段字段方法检查更改
相关文章:
- 用于用户内容的简单代码编辑器/文本格式化程序(在Rails中)
- 如何制作交互式网站并允许用户编辑网站内容
- 无法根据用户在编辑窗口中的输入显示/隐藏jtable jquery字段
- 两个用户如何协作编辑 JSON 文件
- 我在Phaser有一个项目.我想在画布上的元素上做一个用户图像编辑器
- 如何在asp.net中的用户定义的数据网格中使列可编辑
- 如何允许用户添加/编辑spry小部件
- jQueryAjax SQL-如果我在多个用户上单击编辑,则Ajax会更新我单击的所有内容.不是最后一个点击
- php使用ajax生成html表,以应用用户操作,如删除、更新和编辑
- 如何在实时编辑器中跟踪带有名称的用户光标
- c#mvc一次只允许一个用户编辑树视图
- 在用户键入时修剪和编辑文本区域的每一行
- 如何防止用户在内容可编辑元素中键入新行
- 两个用户通过 websocket 编辑输入时出现问题
- 我如何修改我的保存功能,既保存用户/编辑用户
- 当用户单击关闭输入时,自动编辑用户输入
- 编辑用户与云代码javascript和iOS解析SDK
- 如何在AngularJs中重用HTML/Controller来添加/编辑用户
- 如何使用' meteorJs '编辑用户列表
- 如何只为创建用户页面而不编辑用户页面执行Mongoose验证功能