2010-04-26 119 views
23

我有一個表單,我正在使用遠程驗證來檢查電子郵件地址是否已經存在於數據庫中。然而,問題在於,在這種形式下,用戶可以在幾個不同的「組」之間進行選擇,並且每個組都有自己獨特的一組電子郵件地址(因此每個組中可以存在一次相同的電子郵件)。如何使用jQuery遠程驗證依賴於表單中另一個字段的字段?

組選擇是窗體上的下拉列表,並且電子郵件地址是具有遠程驗證的輸入字段。我有幾個問題。首先,我建立了我的遠程規則是這樣的:

remote: { 
    url: 'remote_script.php', 
    data: { group_id: $('select.group_id').val() } 
} 

然而,這似乎是靜態設置GROUP_ID參數無論在選擇第一個值。意思是,如果我改變選擇,然後再次觸發遠程驗證,GROUP_ID參數不會改變

首先,我怎樣才能使這個參數動態的,取決於選擇的形式的價值?

其次,如何手動觸發電子郵件地址字段的遠程驗證?當group_id選擇更改時,我想重新觸發電子郵件地址字段的遠程驗證(不更改字段的值)。我試着用

$(selector).validate().element('.email_addr') 

但這似乎只是觸發標準的驗證(需要電子郵件),而不是遠程調用。

+0

@Adrian欣賞的編輯,但我覺得冠軍的第二部分實際上是比較難的部分弄清楚!我認爲出於搜索的目的,在標題中有一些參考可能會更有用。回想起來,我應該提出兩個問題,但那是五年前... – 2015-04-08 21:25:15

回答

36

找到了解決我的問題的第二部分:

$(".email_addr").removeData("previousValue"); 

將刪除遠程請求的高速緩存中,並允許遠程請求被再次觸發,使用.element()。

因此我的代碼如下:

$("select.group_id").change(function() { 
    $(".email_addr").removeData("previousValue"); //clear cache when changing group 
    $("#customer_form").data('validator').element('.email_addr'); //retrigger remote call 
    //my validator is stored in .data() on the form 
}); 

解決方案在這裏找到:solution

我的問題的第一部分是由@Jeffery最初回答要

所有需要被完成的是將參數的值更改爲函數,而不僅僅是一個值。傑弗裏的例子如下複製用於未來的Google:

remote: { 
    url: 'remote_script.php', 
    data: { 
    group_id: function() { 
     return $('select.group_id').val(); 
    } 
    } 
} 
+0

這幫了我:) – 2010-12-22 01:44:05

+0

這似乎不適用於我:http:// stackoverflow。 com/questions/11479383/jquery-validation-remote-method-only-triggering-once-wont-trigger-after-vali – Jason 2012-07-14 13:49:52

+0

另外,'validator'選擇器從哪裏來?在上面的評論中看到我的問題。 – Jason 2012-07-14 15:10:55

8

second example遠程它看起來像功能(驗證期間評估)可以用於數據,因此

remote: { 
    url: 'remote_script.php', 
    data: { 
     group_id: function() { 
      return $('select.group_id').val(); 
     } 
    } 
} 

應該工作。

關於第二個問題,你有沒有嘗試通過驗證規則validate()

+0

是的,你說得對,它適用於動態數據。 我從.validate()調用返回原始驗證器,然後執行諸如v.element('之類的操作。email_addr'),但我似乎無法得到這個工作。你知道.element()是否會觸發遠程調用嗎? – 2010-04-26 08:25:26

+0

沒關係,我弄明白了,我的選擇器有錯誤。 .element()是否重新觸發遠程調用,只需要原始的驗證器對象,回想起來,這是完全合理的。 – 2010-04-26 08:28:34

+0

嗯,在進一步測試中,似乎問題的第二部分仍未解決 - 似乎無法在未更改的字段上觸發遠程呼叫。將此問題標記爲完整並單獨提出。 謝謝 – 2010-04-28 02:37:15