2010-02-19 50 views
0

我有五種形式在頁面中。我有我的驗證也使用jQuery驗證插件。有這種奇怪的小例子,我想覆蓋 - 其中服務器沒有返回任何結果(對於任何形式),我需要顯示相同的jQuery驗證。我能做到這一點與:jquery - 我如何找到當前光標位置

$("#form1").validate().element(".myid");    

現在,我被困在實施這一對所有五種形式(5個forms-五個領域)。

一種方式是傳統的if-else方式

var re5digit=/^\d{5}$; 
if (document.myform.myid.value.search(re5digit)==-1){ 
alert("1"); 
} 
(if (document.myform.myid2.value.search(re5digit)==-1){ 
alert("2"); 
} 
... 

OR問你一個jQuery黑客工具,能找到我當前光標所在位置,我可以打電話驗證? 意見?

回答

1

我不知道我很瞭解你的頁面佈局和驗證設置,但您可能能夠存儲的最後一個形式,裏面有一個集中的元素:

var lastFocusedForm; 
$('input').focus(function() { 
    lastFocusedForm = $(this).parents('form'); 
}); 

// and then when you need to validate... 
lastFocusedForm.validate().element(".myid"); 
+0

@詹姆斯 - 這是接近我在找什麼,但如果每個表單有不同的ID? – bob 2010-02-19 22:47:47

+0

此外,表單不是嵌套的。即頁面有很多形式展開..所以$(this).parents('form');不會工作 - 會嗎? – bob 2010-02-19 22:49:33

+0

$('input')。focus(function(){$(this)})上下文中的'$(this)'是指已經被聚焦的元素。因此,如果您使用「form」元素的parents()函數向上搜索DOM樹,則它將與包含該元素的表單元素相匹配。表單不嵌套 - 嵌套表單是無效的html。另外,我不確定'.element(「。myid」)'是否需要驗證。在表單元素上運行「.validate()」應該足夠了。 – 2010-02-20 16:35:42

0

我認爲,你需要使用一點不同的方法。每個驗證請求應該屬於確切的形式。以第二種形式顯示第一種形式的驗證消息時,使用自己的方式可以輕鬆創建情境。爲了避免此類錯誤,您應該爲表單指定唯一的ID,並在您的ajax提交函數中使用JavaScript關閉(http://odetocode.com/Blogs/scott/archive/2007/07/10/closure-on-javascript-closures.aspxhttp://www.jibbering.com/faq/faq_notes/closures.html)。

$(document).ready(function(){ 
    var form = $("#ajax-form"); 
    form.submit(function(){ 
     $.post( 
      "/controller/path", 
      form.serialize(), 
      function(receivedData){ 
       alert(receivedData); 
       form.whateveryouwant(); // do whatever you want with your form 
      } 
     ); 
    }); 
}); 
相關問題