确定(dojo)dijit.Editor中的内容是否与初始值不同

时间:2012-03-22 16:57:08

标签: javascript dojo

我有一个包含许多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本身。

3 个答案:

答案 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');
}