2012-07-25 17 views
52

Estoy usando una plantilla jquery para generar dinámicamente varios elementos en la misma página. Cada elemento se ve asíJquery get form valor del campo

<div id ="DynamicValueAssignedHere"> 
    <div class="something">Hello world</div> 
    <div class="formdiv"> 
     <form name="inpForm"> 
      <input type="text" name="FirstName" /> 
      <input type="submit" value="Submit" /> 
     </form> 
    </div> 
</div> 

Me gustaría utilizar Jquery para procesar el formulario en el envío. También me gustaría revertir los valores del formulario a sus valores anteriores si algo sale mal. Mi pregunta es ¿Cómo puedo obtener el valor del cuadro de entrada usando Jquery? Por ejemplo, puedo obtener el valor de la div con la clase "algo" al hacer

var something = $(#DynamicValueAssignedHere).children(".something").html(); 

De manera similar, quiero ser capaz de recuperar el valor del cuadro de texto. En este momento, traté

var text = $(#DynamicValueAssignedHere).children(".formdiv").findnext('input[name="FirstName"]').val(); 

pero no parece estar funcionando

+3

Por una vez, javascript sencillo podría ser más fácil: '$ ('input') [ 0] .form.FirstName.value' accederá al valor del campo – cnlevy

Respuesta

103

Usted tiene que usar value attribute para obtener su valor

<input type="text" name="FirstName" value="First Name" /> 

intento -

var text = $('#DynamicValueAssignedHere').find('input[name="FirstName"]').val(); 
+6

@curiouspanda: solo un consejo. Si los valores de "nombre" son únicos, no necesita usar $ ('# DynamicValueAssignedHere'). Simplemente vaya directamente usando $ ('input [name = "FirstName"]'). Val().Aún prefiero usar identificadores para tratar con los componentes. – davidbuzatto

+2

@davidbuzatto - Los valores de los nombres no son únicos. Solo la ID para la div más externa es única. La solución Dipaks funcionó bien. –

39

Puede ser mucho más simple que lo que está haciendo.

HTML:

<input id="myField" type="text" name="email"/> 

JavaScript:

// getting the value 
var email = $("#myField").val(); 

// setting the value 
$("#myField").val("new value here"); 
+0

No puedo usar una ID para el campo porque mi página puede contener múltiples formularios con los mismos elementos (estoy usando la temperatura del repetidor jquery lates) –

+0

@curiouspanda: Bien, entonces puedes hacer esto usando el enfoque de Dipaks. Incluso utilizando las plantillas de repetidor, creo que puede trabajar con identificadores únicos, tal vez estableciendo un prefijo para cada ID de componente del conjunto de campos. – davidbuzatto

+0

@curiouspanda do Dynamic IDs tiene algo en común? – undefined

1

si conoce la Identificación de las entradas sólo se necesita utilizar esto:

var value = $("#inputID").val(); 
2
var textValue = $("input[type=text]").val() 

esto hará que todos los valores de todos los cuadros de texto. Puede usar métodos como children, firstchild, etc. para perfeccionar. Al igual que en el formulario $ ('form [name = form1] input [type = text]') ID más fáciles de usar para elementos de segmentación, pero si es puramente dinámico puede obtener todos los valores de entrada y luego recorrerlos con JS.

5

Un enfoque alternativo, sin necesidad de buscar el html campo:

var $form = $('#' + DynamicValueAssignedHere).find('form'); 
var formData = $form.serializeArray(); 
var myFieldName = 'FirstName'; 
var myFieldFilter = function (field) { 
    return field.name == myFieldName; 
} 
var value = formData.filter(myFieldFilter)[0].value; 
0

$("form").submit(function(event) { 
 
     ///First Field Value 
 
     var firstfield_value = event.currentTarget[0].value; 
 
    ///Second Field Value 
 
     var secondfield_value = event.currentTarget[1].value; 
 
     
 
     alert(firstfield_value); 
 
     alert(secondfield_value); 
 
     event.preventDefault(); 
 
    });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<form action="" method="post" > 
 
<input type="text" name="field1" value="value1"> 
 
<input type="text" name="field2" value="value2"> 
 
</form>

+1

Si bien este fragmento de código puede resolver la pregunta, [incluyendo una explicación] (// meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers) realmente ayuda a mejorar la calidad de su publicación. Recuerde que usted está respondiendo la pregunta a los lectores en el futuro, y es posible que esas personas no sepan los motivos de su sugerencia de código. Por favor, intente no saturar su código con comentarios explicativos, ya que esto reduce la legibilidad tanto del código como de las explicaciones. – FrankerZ

0
// for getting the value from input type text 
var value = $("input[type=text]").val(); 
// for getting the value from by input type name 
var textValue = $("input[name=text]").val() 
Cuestiones relacionadas