2

我希望能够在单击按钮时将所有文本字段重置为其默认值。

到目前为止,我所做的是查询所有文本字段并将我编写的名为“textChanged”的函数绑定到更改事件,如下所示:

require(["dojo/on","dojo/query"], function(on,query){
    query(".Text").on("change",textChanged);
});

函数定义如下:

function textChanged(newVal)
{
...
}

我发现我可以通过赋值来重置函数体中的值:

   newVal.target.value = newVal.target.defaultValue;

如果此函数由更改事件触发。

我想要做的是如果单击按钮,那么我想执行 newVal.target.value = newVal.target.defaultValue 并且无法正确获取上下文。

我尝试在调用时保留“this”变量以及保留“newVal”参数。如果我尝试在上下文之外设置值,则更新不会保留。我尝试将'this'值设置为其他值(nt = this)并将newValue设置为另一个变量(nv = newValue),然后我想执行:nv.target.value = nv.target.defaultValue; 并且虽然清除了表单上的字段,但是当表单提交时,它的实际值仍然是手动修改的值。我注意到当我在按钮单击上下文中直接调用它时,从更改事件中调用 textChanged 时,'this' 与它不同。

我尝试使用 'hitch' 调用它,将 this 的上下文设置为其从 change 事件中获得的值,但这似乎没有设置正确的上下文:

require(["dojo/on", "dojo/_base/lang"], function(on, lang) {
        lang.hitch(nt, textChanged(nv));
});

准确地说 - 在 textChanged 中,我使用 console.log(this); 显示 'this' 的值;当文本从 UI 更改时调用 textChanged 时,“this”为:

然而,当通过单击我的按钮调用它时,该按钮通过

lang.hitch(nt, textChanged(nv));

'this' is: Window fauxRedirect.lsw?applicationInstanceId=guid%3A1eae6af09bf6f543%3A-6644aeb4%3A13a8a4c429e%3A-7ffe&zWorkflowState=2&zTaskId=p1&applicationId=2&zComponentName=CoachNG&zComponentId=3028.b1094dc3-da2b-461a-8d56-f6444891c174&zDbg=2#%20 %20

我已经确认'nt'确实是一样的'

所以,我正在尝试执行 textChanged 函数,以便将“this”设置为该值。

或者,如果有更好的方法可以从另一个控件将字段重置为其默认值 - 那也可以。

提前致谢。

4

1 回答 1

4

我不确定您要做什么的完整背景,所以不知道这是否回答了您的问题?

您可以将表单中的所有小部件重置为其默认值,只要它们包装在dijit/form/Form小部件中即可。如果所有小部件都正确包装,则只需在表单上调用reset()即可。

注意: 这不适用于本机元素(即标准 <input> 或 <textarea> 字段,它们必须是 dijit/form/TextBox ...等)。

例如:

<form data-dojo-type="dijit/form/Form" data-dojo-id="theForm">
    <label for="field1">Field 1:</label>
    <input
        type="text" id="field1" name="field1" 
        data-dojo-type="dijit/form/TextBox" value="default1"
    /><br />

    <label for="field2">Field 1:</label>
    <input
        type="text" id="field2" name="field2"
        data-dojo-type="dijit/form/TextBox" value="default2"
    />
    <br /><br />

    <button
        type="button" 
        data-dojo-type="dijit/form/Button" 
        onclick="theForm.reset();"
    >Reset</button>
</form>

单击此处的重置按钮应将字段重置为:field1="default1" 和 feield2="default2"。

该表单正在调用每个小部件的reset()方法。如果您创建自己的小部件,您需要确保它们的reset()方法正常工作(以及用于设置其值的_getValueAttr()方法)。

于 2012-10-30T11:33:12.987 回答