我有一个包含许多dijit.form元素的表单,还有一个dijit.Editor。表单最初填充了我从服务器获取的数据。用户可以更改内容,然后将其提交给服务器。一个经典的用例。
当用户提交表单时,我只需要发送更改的数据。 dijit.Editor的问题在于,即使用户没有进行任何更改,它有时也会更改初始内容。例如:
在dijit.editor中输入的初始内容是:
"Gesegmenteerde rand, 115 mm~Max 13280 U/min, 80 m/sec</br>~Drooggebruik"
当检索像这个editorObj.get('value')的内容时;它返回:
"Gesegmenteerde rand, 115 mm~Max 13280 U/min, 80 m/sec<br />~Drooggebruik"
正如您所见,&lt; / br&gt;更改为&lt; br /&gt;。我知道原来的价值是错误的,但那是因为来源很糟糕,这是我无法控制的。
所以我的问题是:是否有一种简单的方法可以检查用户是否确实更改了内容,而不仅仅是dijit.Editor本身。
答案 0 :(得分:1)
这样的东西(在编辑器标记上)起作用:
onkeypress="MyObject.setDirty(true);"
并在MyObject.isDirty
上跟踪它。
这样做的缺点是,如果用户键入编辑器然后将所有内容修改为与原来完全相同,则该值将是错误的(即,true,而内容又回到原始状态),但这足够了用于大多数目的。
答案 1 :(得分:1)
如果您只想检查用户是否修改了某些内容,您可以尝试:
var editorIsDirty = false;
var someConnect = dojo.connect(myEditor, "onChange", this, function(newValue){
if(originalSource != newValue){
editorIsDirty = true;
return;
}
editorIsDirty = false;
});
类似的东西,你明白了;)
答案 2 :(得分:1)
我最终做的是向编辑器添加两个额外的属性:
dijitObj.set('originalValue', value);
dijitObj.set('value', value);
dijitObj.set('uneditedValue', dijitObj.get('value'));
在读取编辑器的值时,我使用这些来确定是否有任何改变:
var value = dijitObj.get('value');
if (dijitObj.get('uneditedValue') === value) {
// The value hasn't changed, so we send the original value
value = dijitObj.get('originalValue');
}