2011-09-23 64 views
3

我們擁有jQuery的自動完成輸入框:jQuery的變化和驗證

<input name="suburb" id="suburb-agency" autocomplete="off" class="text" type="text" value=""> 

這滴下來,當他們選擇一個選項,另一種選擇框取決於選擇什麼更新時間:

<select class="text" name="state" id="state-agency"> 
    <option value="notselected">Please select your state...</option> 
    <option value="Apple">Apple</option> 
    <option value="Pear">Pear</option> 
</select> 

說例如他們在#suburb-agency自動完成中選擇Pear,然後自動選擇梨#state-agency

該作品完美年。

我遇到的唯一問題是jquery驗證,當選中Pear並且#state-agency框被更改時,驗證不會顯示,但是如果我從下拉框中手動選擇一個選項,則會顯示驗證。

這裏是我的jQuery:

/* STATE VALIDATION */ 
    $("#state-agency").change(function() { 
     var state = $('#state-agency').val(); 
     if (state == "notselected"){ 
      $('#state-agency').css({"border-color":"#3399ff"}); 
      $('#state-err').html("You must choose which state you work in.").removeClass("success_msg").addClass("error_msg"); 
      return false; 
     }else{ 
      $('#state-agency').css({"border-color":"#1f6d21"}); 
      $('#state-err').html("Thanks for choosing your state!").removeClass("error_msg").addClass("success_msg"); 
     } 
    }); 

我怎麼能修改此所以它顯示了成功消息如果從自動完成選擇?而不只是手動?我猜我需要從change function更改?

編輯(我們的自動完成其更新下拉框中的請求代碼)

$(function() { 
    function split(val) { 
     return val.split(/,\s*/); 
    } 
    function extractLast(term) { 
     return split(term).pop(); 
    } 

    $("#suburb-agency") 
     // don't navigate away from the field on tab when selecting an item 
     .bind("keydown", function(event) { 
      if (event.keyCode === $.ui.keyCode.TAB && 
        $(this).data("autocomplete").menu.active) { 
       event.preventDefault(); 
      } 
     }) 
     .autocomplete({ 
      source: function(request, response) { 
       $.getJSON("http://www.site.com/folder/script.php", { 
        term : extractLast(request.term) 
       }, response); 
      }, 
      search: function() { 
       // custom minLength 
       var term = extractLast(this.value); 
       if (term.length < 2) { 
        return false; 
       } 
      }, 
      focus: function() { 
       // prevent value inserted on focus 
       return false; 
      }, 
      select: function(event, ui) { 
       if (ui.item) { 
       $('#state-agency').val(ui.item.state); 
       } 
       else { 
       $('#state-agency').val(''); 
       } 
      } 
     }); 
}); 
+0

你能告訴我們「你如何更新下拉的價值」? –

+0

我將用我們的自動完成代碼編輯我的問題,選擇下拉列表。 – Latox

回答

0

我找到了一個解決方案,我需要在自動完成JS中使用trigger()關聯ID。

0

如果您正在使用jQuery驗證,執行輸入元素的驗證你更新後,你需要調用

$(selector).valid()