【问题标题】:Dojo OnKeyPress Handler: TextBox value is blankDojo OnKeyPress 处理程序:TextBox 值为空白
【发布时间】:2011-06-23 14:50:12
【问题描述】:

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

或者换句话说:输入field1。点击标签。输入字段2。点击进入。 field2 是空白的,除非我单击该字段或 shift-tab 返回。

有什么想法吗?

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

【问题讨论】:

    标签: dojo


    【解决方案1】:

    使用dijit.byId('field1').get('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

    【讨论】:

    • 问题是由不推荐使用获取值引起的...使用 attr('value') 修复了该问题。您的提交方法要好得多,将转换为...谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-03
    相关资源
    最近更新 更多