2013-01-23 117 views
-1

想象一下,第一次,數據不匹配,並且ajax已經返回了請求,然後向表單發送一條錯誤消息,之後我該如何停止Ajax調用在表單/輸入中進行的更改?如何在沒有任何更改的情況下停止Ajax調用

$("input[name=signup]").click(function(event) { 

if ($(this).attr('type') == "submit" && $(this).attr('name') == "signup") { 

     formValidate = function() { 
      $.ajax({ 
       url: "/ajax/req-signup.aspx", 
       type: "post", 
       dataType: "json", 
       data: { ... }, 
       success: function(response) { ... } 
      }); 
     } 
     formValidate(); 
    } 
event.preventDefault(); 
}); 
+0

'沒有改變'不明白。 – Jai

+0

這意味着用戶沒有改變任何輸入值 –

回答

1

添加一個全局變量

var allowAjax = true; 

將其設置爲false,如果驗證失敗:在形式改變的東西時,

allowAjax = false; 

設置爲true

$("input").change(function() { 
    allowAjax = true; 
}); 

和m時檢查它的狀態亞慶Ajax調用:

if ($(this).attr('type') == "submit" 
    && $(this).attr('name') == "signup" 
    && allowAjax) { ... } 

或者,您也可以禁用當驗證失敗的提交按鈕,使它的變化。

$(":submit").attr('disabled', 'disabled'); 

如果你不介意使用一個插件,檢查出jQuery disabler widget,你可能會發現它更容易使用。

+0

謝謝,.change()解決了我的問題!非常感謝。 –

1

你可以單擊事件綁定,只有當有新的變化 - 然後解除綁定,當點擊事件被觸發(從而否定了一個全局變量的需要):

/* whenever an input changes on your form, bind click event */ 
$("SELECT INPUTS HERE").change(function(){ 
    /* unbind first to ensure the click event won't be registered/triggered multiple times */ 
    $("input[name=signup]").unbind("click").click(doSignup); 
}); 

function doSignup(e){ 
    if ($(this).attr("type") == "submit" && $(this).attr("name") == "signup"){ 
     /* a successful click has happened - unbind click */ 
     $("input[name=signup]").unbind("click"); 

     /* do ajax call */ 
     $.ajax({ 
      url: "/ajax/req-signup.aspx", 
      type: "post", 
      dataType: "json", 
      data: { ... }, 
      success: function(response) { ... } 
     }); 
    }; 

    e.preventDefault(); 
}; 

從UX的角度,你可以提高這在幾個方面。

  1. 也是「禁用」,只要你解除綁定的點擊,或 否則指示該按鈕當前處於 可點擊狀態,用戶的按鈕。
  2. 而不是取消綁定點擊,考慮 有條件解除綁定。比如,取消綁定成功,但不要解綁 錯誤,以便他們可以再試一次。另外,如果您正在進行輸入驗證,則當用戶的輸入無效時, 可能會解除綁定。等等。

希望有所幫助!

相關問題