2012-04-03 8 views
2

Ich möchte den Wert des Kontrollkästchens in einem Array speichern, aber ich kann die Validierungsregeln nicht verwenden, da der Name selectList[] anstelle von selectList ist. Ich habe versucht ID, aber es scheint die Regel nur an den Namen zu binden.jquery validate add Regeln für eine Array-Eingabe

html:

<input id='sendList' type='checkbox' name='selectList[]' value='$set[ListID]'> 

js Regel:

$("#selectList").validate({ 
     rules: { 
      selectList[]: { 
       required: true, 
       minlength: 1 
      } 
     } 
    }) 

}); 

Danke

Antwort

0

Warum nicht wickeln selectList[] in Anführungszeichen:

$("#selectList").validate({ 
    rules: { 
     'selectList[]': { 
      required: true, 
      minlength: 1 
     } 
    } 
}); 

In initializing Javascript object property names, sie können eine Kennung (die Art, wie Sie es versucht haben), eine Zahl oder eine Zeichenfolge sein.

Arbeitscode: http://jsfiddle.net/rMgLG/

+2

Eigentlich ist dies eine nicht arbeiten Antwort. jQuery validate erlaubt keine Validierung für mehrere Felder mit dem gleichen Namen, daher würde in der obigen Antwort das erste Feld mit dem Namen 'selectList []' validiert werden, was nicht viel hilft, wenn Sie versuchen, ein Array von Feldern zu posten ... – jtheman

+0

seine Arbeit für mich .......... danke !!!!!!!!! –

2

Problem ist, dass die fertige jquery.validate.js nur das erste Element der Kategorie validiert []. Also müssen wir es ein wenig modifizieren.

In jquery.validate.js, eine Funktion finden namens check, haben wir es zu modifizieren, wie unten:

checkForm: function() { 
this.prepareForm(); 
for (var i = 0, elements = (this.currentElements = this.elements()); elements[i]; i++) { 
if (this.findByName(elements[i].name).length != undefined && this.findByName(elements[i].name).length > 1) { 
for (var cnt = 0; cnt < this.findByName(elements[i].name).length; cnt++) { 
this.check(this.findByName(elements[i].name)[cnt]); 
} 
} else { 
this.check(elements[i]); 
} 
} 
return this.valid(); 
},