2014-06-19 83 views
4

我在下拉字段上使用JQuery遠程驗證來檢查所選字段是否已存在。整體代碼工作正常並正確驗證。但問題是遠程驗證在onChange事件後發送ajax調用,意味着它在單擊頁面上的任何位置後顯示唯一的密鑰驗證錯誤。onClick下拉字段的遠程驗證

我想驗證一次用戶點擊下拉選項。我試過onclick:true,但它不起作用。請檢查我的代碼:

$("#myform").validate({ 
    // onclick:true, 
    // onkeyup:true, 
    rules: { 
    "customer[customer_personal_details_id]": { 
     required: true, 
     remote: { 
      url: "/validation/check", 
      type: "post", 
      data: { 
       columnVal: function() { 
        return $("#customer_customer_personal_details_id").val(); 
       } 
      } 
     } 
    } 
    }, 
    messages: { 
    "customer[customer_personal_details_id]": { 
     required: "Please Select Account Holder", 
     remote: "One active account already exists. Duplicate accounts are not allowed."} 
    } 
}); 

謝謝。任何幫助,將不勝感激。

+1

而不是使用的onClick內,嘗試一個onClick函數中確認的。 – Maxzeroedge

+0

@Maxzeroedge:怎麼樣? – Sky

+0

選項上的點擊事件沒有標準。看到這[相關問題](http://stackoverflow.com/questions/1402227/jquery-click-event-on-select-option-element-in-chrome)和[這個答案](http:// stackoverflow。com/a/10103116/2049063) –

回答

1

我不使用: 「JQuery的遠程驗證」,但是這個代碼可以幫助你:

JavaScript代碼:

window . onload = function() 
{ 
    "use strict"; 
    document . querySelector ("form#myform > select") . selectedIndex = -1; 
} 

function test() 
{ 
    "use strict"; 
    if (typeof customOption === "undefined") { alert ("FATAL SYSTEM ERROR !"); return; } 
    alert ("Valid option selected ! Congratulations !\nYour selected value is: \"" + customOption + "\""); 
} 

和HTML5代碼:

<select onchange="customOption = this . options [ this . selectedIndex ] . value;"> 
<!-- (...) --> 
</select> 

這是隻有示範。您可以調用您的函數,以便您可以:通過更改HTML5代碼(選擇元素onchange屬性)來「通過用戶單擊下拉選項驗證它」。

工作小提琴:JSFiddle

2

select的變化事件時驗證一個更好的指標,但沒有onchange選項。下面應該工作:

$(function() { 
    $('select').on('change', function() { 
     $(this).trigger('focusout'); 
    }) 
    .on('focusout',function(e) { 
     e.preventDefault(); 
    }); 
}); 

觸發focusout應觸發驗證要在select元素上發射,除非onfocusout選項設置爲false。您可能想要防止默認行爲focusout,以便它不會觸發remote驗證兩次。

在下面的演示中,您會看到只要您在select元素中選擇了新值,就會嘗試進行ajax調用 - 請參閱開發工具的網絡選項卡 - 然後在focusout上不要求嘗試被製成。

JSFIDDLE DEMO

onfocusout在類型:Boolean或功能()驗證元素(除 複選框/單選按鈕)上模糊。如果沒有輸入任何內容,則跳過所有規則 ,除非該字段已被標記爲無效。

http://jqueryvalidation.org/category/plugin/ 
2

試試這個 - 假設你有< SELECT ID = 「DROPDOWN_ID」 >

$('#DROPDOWN_ID').on('click', function() { 
    $("#myform").validate(); 
});