2011-05-17 93 views
0

以下多個領域,是我的HTML的一部分:驗證具有相同名稱

<div class="editor-field"> 
    <input id="ImmobilizationLength_1" name="ImmobilizationLength" type="text" value=""> 
</div> 
.... 
*HTML Code* 
.... 
<div class="editor-field"> 
    <input id="ImmobilizationLength_2" name="ImmobilizationLength" type="text" value=""> 
</div> 

當我想驗證與jQuery這些領域,我添加到規則:

ImmobilizationLength: { required: true, digits: true } 

當表單被提交,只有第一個ImmobilizationLength字段被驗證。

我讀計算器有關的其他問題,其中建議使用:

$('[name="ImmobilizationLength"]').each(function(){ 
    $(this).rules("add", { required: true, digits: true }); 
}); 

但是,當我這樣做,我得到這個錯誤:

類型錯誤:無法讀取屬性「節點名稱'的undefined

我該怎麼辦?

+4

ID應始終是唯一的,表單內的名稱也應該是。爲什麼你不能讓它們都是獨一無二的,並相應地改變jquery? – 2011-05-17 19:49:54

+0

勞倫斯是正確的 - 編號的意思是在頁面上是唯一的。您可以使用類選擇器將驗證應用於類似的項目。該類可以是任何東西,它不一定實際存在於樣式表中。 – camainc 2011-05-17 19:58:14

回答

0

如果您發佈數據時發現數據不正確,您不能使用具有相同ID選擇器的項目也無法使用 。除非你使用namearray

name="ImmobilizationLength[]" 

例如

<div class="editor-field"> 
    <input id="input_1" name="input_1" class="test" type="text" value=""> 
</div> 

基礎上的評論,一旦你更改ID,您可以使用開始與選擇

$('[id^="input_"]').each(... 
.... 
*HTML Code* 
.... 
<div class="editor-field"> 
     <input id="input_2" name="input_2" class="test" type="text" value=""> 
</div> 

我想會根據班級名稱給他們一個班級和規則

$.validator.addClassRules({ 
     test: { 
      digits: true, 
      required: true 
     } 
}); 
+0

@Tuizi你是什麼意思的「但我的HTML是從一個靜態的來源」這不是一個你有控制的頁面? – mcgrailm 2011-05-17 20:16:47

+0

那麼你爲什麼/如何驗證它? – mcgrailm 2011-05-17 20:25:38

+0

那麼你爲什麼/如何驗證它?同樣在光禿禿的分鐘,我會建議你跟控制的人說話,讓他們知道他們正在生成無效的HTML – mcgrailm 2011-05-17 20:33:10

0

根據W3Schools的,ID必須是唯一的:

「id屬性指定用於HTML元素的唯一ID。 ID必須是HTML文檔中是唯一的。」

http://www.w3schools.com/tags/att_standard_id.asp

由於標記是無效的,因爲預期你的JavaScript將無法正常工作。當標記被糾正(通過創建唯一的ID,並根據需要添加一個類) ,您將很容易就能驗證您的獨特字段

請注意,與ID不同,類可以重複使用,名稱不應重複使用,因爲如果提交表單,每個字段的值將相互覆蓋

編輯:

重複的名稱仍然是一個問題。如果你想使用each(),你將需要使用一個可以重複的標識符,比如class。

$('[name="ImmobilizationLength"]').each(function(){ 
}); 

將成爲

$('.test').each(function(){ 
}); 
+0

現在好了,我有不同的ID,但jQuery不驗證第二個字段... – Tuizi 2011-05-17 20:21:43

+0

你可以發佈你的更新的HTML與唯一的ID和任何相關的Javascript更改嗎?您可以通過編輯原始問題來進行更改。 – 2011-05-17 20:24:33

+0

好的,問題更新! – Tuizi 2011-05-17 20:43:33

0

這是我如何解決我有一個類似的問題。雖然不是驗證,但是我動態地設置了值。但是相同的基本邏輯可應用於:

function validateFieldValues(fields) 
{ 
    if ('length' in fields) 
    { 
     // We got a collection of form fields 
     for (var x = 0; x < fields.length; x++) { 
      doValidation(fields[x].value); 
     } 
    } 
    else 
    { 
     // We got a single form field 
     doValidation(fields.value); 
    } 
} 

function submitHandler(oForm) 
{ 
    // Get the element collection of <input> elements with the same name 
    var someNameElmts = oForm.elements.someName; 

    // *should* always exist. But just in case... 
    if (someNameElmts) { 
     validateFieldValues(someNameElmts); 
    } else { 
     // deal with it 
    } 
} 

在HTML:

<form 
method="post" 
name="someForm" 
id="someFormID" 
action="/some/path" 
onsubmit="submitHandler(this);"> 

希望幫助!

+0

是的,這是一個老問題,但我有一個答案,所以我認爲它不會傷害發布。:-) – 2012-01-31 13:59:30