2011-10-21 75 views
1

我打開一個jQuery對話框內的JavaScript代碼,它會打開非常好,這個對話框的內容是一種形式,這種形式的一個輸入是:如何運行一個jQuery對話框

<input onkeyup="testOnKeyUp();" type="text" name="userName" id="userName"> 

這裏是哪裏出現我的問題,這是假設當有人在這個輸入中鍵入一個鍵時,下面的代碼被激活並應該運行,但它不起作用。

var validateUserNameSpan = $j('#userNameSpan'); 

function testOnKeyUp(){ 
validate(this, validateUserNameSpan, 'username'); 
} 

function validate(field, span, property) { 

if (field.value != field.lastValue) { 
if (field.timer) clearTimeout(field.timer); 

field.timer = setTimeout(function() { 
    span.value = ""; 
    span.removeClass('error').html('checking ...'); 
    $j.ajax({ 
     url: '/signup/'+property, 
     data: property + '=' + field.value, 
     dataType: 'json', 
     type: 'post', 
     success: function (json) { 
      updateMessage(span, json.success, json.message); 
      if(property=="email"){ 
       emailValid = true; 
      }else if(property=="username"){ 
       userNameValid = true; 
      } 
     }, 
     error: function() { 
      ajFailureInitSignup(span); 
      if(property=="email"){ 
       emailValid = false; 
      }else if(property=="username"){ 
       userNameValid = false; 
      } 
     } 
    }); 
}, 400); 


if(userNameValid && emailValid) document.getElementById('buttonLink').onclick=null ; 

field.lastValue = field.value; 
} 
} 

我在做什麼錯?

我不知道,但谷歌上搜索我已經得到了信息,讓我覺得:沒有被執行

$j.ajax({ 

說我這個對話框內運行(確認功能),爲什麼我比如說 ?因爲這個對話框是在DOM中創建的,並且在創建之後這個$ j.ajax不會被執行。

這是真的嗎?

我真的很感謝任何幫助。

+1

你實際上是否將testonKeyup函數附加到彈出窗體的輸入? –

+0

是的,我確實如果我在函數testOnKeyUp()中放置一個警告消息;顯示警告,這意味着當用戶編寫一個密鑰的過程中工作正常,直到這個函數,問題看起來好像是在validate()函數 – Saymon

回答

0

好的,主要問題是您的AJAX調用在您發出後立即返回 - 這是正常的(這是ajax中的第一個'A' - 異步)。這意味着您的代碼會立即繼續到if (usernamevalid && emailvalid)代碼部分。這些變量在那時不存在,因爲AJAX調用還沒有返回。所以你要比較未定義的變量,這也會失敗。

您必須在ajax成功/錯誤處理程序中移動該比較,以便只有在ajax調用實際生成可以比較的數據時才能進行比較。

+0

好吧,但是當我在另一個頁面中加載這種形式(不喜歡對話框)完成這項工作並且執行$ j.ajax屬性。這種對話方式有沒有關於你說的不同? – Saymon

相關問題