2011-06-23 75 views
1

我有一個不包含提交按鈕的Dojo表單。相反,我添加了一個onkeypress處理程序來在按Enter時調用一個方法。我遇到的問題是,當我在模糊當前字段之前敲入enter時,_process方法認爲該字段爲空。Dojo OnKeyPress處理程序:TextBox值爲空

或者換句話說:鍵入field1。點擊標籤。在field2中鍵入。點擊進入。 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

回答

4

使用dijit.byId('field1').get('value')代替直接嘗試訪問屬性「值」。在你的例子中,你將值保存在變量field1field2中,並且在使用變量usernamepassword的警報中可能是答案,爲什麼你什麼都沒有得到。但你仍然應該使用get方法來獲得一個屬性,而不是直接訪問該屬性。

當您按下「Enter」時,您的表單將提交。因此,您需要連接到表單上的「onSubmit」事件,而不是onkeyPressonKeyUp

我創建的第一個示例在控制檯中按下的每個鍵上輸入輸入框的值。

http://jsfiddle.net/a8FHg/

但你真正想要的是鉤住提交。我修改了這個例子。新示例連接到「onSubmit」並創建一個包含用戶輸入文本的警告框。

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

對於completness如果的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

+1

問題是由於不推薦使用獲取值引起的......使用attr('value')修復了這個問題。你的提交方法好得多,會轉換爲...謝謝! – Sean