2010-06-14 20 views
10

Estoy intentando agregar una regla de validación a varios cuadros de texto dinámicamente. Aquí está la JS:jQuery: agregar dinámicamente la regla de validación a varios cuadros de texto

  //validate form. 
      $("#SubmitForm").validate(); 
      $("input[id*=Hours]").rules("add", { 
       number: true, 
       messages: { 
        number: "Please enter a valid Hours" 
       } 
      }); 

Esto se aplica la regla de la primera caja de texto en la página con "Horas" del ello, pero entonces no se aplica a cualquiera de los otros.

¿Alguien sabe qué pasa aquí?

Gracias, Justin

Respuesta

10

Puede añadir la regla a cada elemento coincidente por el selector de comodín con .each(), así:

$("#SubmitForm").validate(); 
$("input[id*=Hours]").each(function() { 
    $(this).rules("add", { 
     number: true, 
     messages: { 
      number: "Please enter a valid Hours" 
     } 
    }); 
}); 

Espero que esto ayude!

+0

Gracias, .each (función() {era lo que estaba buscando – Justin

+0

He actualizado mi respuesta porque su comentario por turnos me hizo darme cuenta de que ni siquiera necesita el método de cruce de árbol ya que un selector de comodines coincidirá todos los campos especificados de todos modos. ¡Duh! :) –

+0

Funciona bien. Gracias. – spr

0

que era capaz de conseguir que funcione de hacer esto:

<% 
      int index = 0; 
      foreach (var log in Model.InvoiceLogs) { 
      %> 
       <tr> 
        <td class="topalign"> 
         <%: log.LogDate.ToShortDateString() %> 
         <%: Html.Hidden("InvoiceLogs[" + index + "].InvoiceID", log.InvoiceID) %> 
         <%: Html.Hidden("InvoiceLogs[" + index + "].InvoiceLogID", log.InvoiceLogID) %> 
        </td> 
        <td class="editor-field-medium"><%: Html.TextArea("InvoiceLogs[" + index + "].Description", Convert.ToString(ViewData["Description_" + log.InvoiceLogID]))%></td> 
        <td class="editor-field-small topalign"> 
         <%: Html.TextBox("InvoiceLogs[" + index + "].Hours", ViewData["Hours_" + log.InvoiceLogID])%> 
         <script type="text/javascript"> 
          $(document).ready(function() { 
           $("#InvoiceLogs_<%: index %>__Hours").rules("add", { 
            number: true, 
            messages: { 
             number: "Invalid Hours" 
            } 
           }); 
          }); 
         </script> 
        </td> 
       </tr> 
      <% 
       index++; 
      } 
      %> 
     </table> 

Sin embargo, esto no parece ser una buena solución. ¿Cuál es la forma adecuada de agregar reglas de validación a una lista de controles de entrada de forma dinámica?

Cuestiones relacionadas