Dojo OnKeyPress处理程序:TextBox值为空

时间:2011-06-23 14:50:12

标签: dojo

我有一个不包含提交按钮的Dojo表单。相反,我添加了一个onkeypress处理程序来在按下Enter时调用方法。我遇到的问题是,当我在模糊当前字段之前按Enter键时,_process方法认为该字段为空。

或换句话说:输入field1。点击标签。输入field2。打进去。 field2是空白的,除非我点击字段或移位标签。

有什么想法吗?

dojo.connect(dijit.byId("fkrform"),"onKeyPress",function(e) {                 
    if (e.keyCode == dojo.keys.ENTER) {
        _process();
    } 

及其调用的方法:

function _process()
{
    var field1 = dijit.byId("field1").value;
    var field2 = dijit.byId("field2").value;
    alert(username);
    alert(password);

    ...do stuff...
}

字段是dojoType:dijit.form.TextBox,格式为:dijit.form.Form

1 个答案:

答案 0 :(得分:4)

使用dijit.byId('field1').get('value')而不是直接尝试访问属性“value”。在您的示例中,您将值保存在变量field1field2中,并在警报中使用变量usernamepassword可能是您无法获得的答案任何东西。但您仍然应该使用get方法来获取属性,而不是直接访问该属性。

当您按“Enter”时,您的表单将会提交。因此,您需要连接到表单上的“onSubmit”事件,而不是onkeyPressonKeyUp

我创建的第一个示例在控制台中按下的每个键上打印输入框的值。

http://jsfiddle.net/a8FHg/

但你真正想要的是挂钩提交。我修改了这个例子。新示例连接到“onSubmit”并创建一个包含用户输入文本的警告框。

http://jsfiddle.net/a8FHg/1/

如果jsfiddle某天不起作用,那就是完整性。 JavaScript应该是这样的。

dojo.ready(function(){
    var form = dijit.byId('form');
    var box  = dijit.byId('box');

    var submit = function(event) {
        dojo.stopEvent(event);
        alert("User input was " + box.get('value'));
    };

    dojo.connect(form, 'onSubmit', submit);
});

假设您的HTML中的表单的ID为form,并且您的框的ID为box