2009-10-23 22 views
11

Tengo algunos asp: controles de cuadro de texto en un formulario en una página web, a continuación se muestra un fragmento. El primero es un campo donde se ingresa al destinatario, el otro es un área de texto más grande donde debe cargarse el nombre del destinatario, junto con algún otro texto.Recuperar valor de asp: cuadro de texto con JQuery

<asp:TextBox name="recipient" ID="recipient" class="inputBox" onChange="addNames()" runat="server" /> 
<asp:TextBox TextMode="MultiLine" name="usermessage" ID="usermessage" class="usermessage" height="128" width="425px" runat="server"></asp:TextBox> 

un mensaje estándar se carga en este segundo cuadro de texto con el uso de JQuery con este código:

$(".usermessage").val("Hello etc"); 

Esto funciona muy bien, se muestra el mensaje.
Cuando un usuario ingresa el nombre de un destinatario o su propio nombre en uno de los otros cuadros de texto, se activa addNames(). Esta función agrega el nombre del destinatario al mensaje estándar en el cuadro usermessage.

function addNames() { 
    //update textbox 
    var recipient = $(".recipient").val(); 
    var sender = $(".name").val(); 
    $(".usermessage").val("Hello " + recipient +", \nThis is a message. \n\rKind regards, \n" + sender); 
    } 

El problema es que las dos variables receptores y emisores son "indefinido".

Hola undefined,
Éste es un mensaje.

Saludos cordiales,
indefinidos




pregunta real: ¿Cuál es el código correcto para recuperar el valor de un asp: textbox si esto

var recipient = $(".recipient").val(); 

no funciona?

La salida en el html es el siguiente:

<input name="ctl00$contentPlaceHolderRightColumn$recipient" type="text" id="ctl00_contentPlaceHolderRightColumn_recipient" name="recipient" class="inputBox" onChange="addNames()" /> 

estoy usando jQuery v1.3.2, v3.5.3 con Firefox.

Respuesta

17

Por lo que yo puedo decir haciendo

var recipient = $(".recipient") 

seleccionará todos los elementos DOM con una clase de receptor. Su cuadro de entrada tiene una clase de "inputBox".

Usted deberá seleccionar por su ID utilizando el #

Así:

var recipient = $("#recipient") 

Pero se están utilizando controles ASP.NET, que le dan un identificador único generado en el servidor por lo que es único. (En su caso se trata de ctl00_contentPlaceHolderRightColumn_recipient)

Para seleccionar tendrá que hacer

var recipient = $("#<%=recipient.ClientID%>") 

-Editado algunos errores de sintaxis

+0

Esto me puso en el camino correcto. Ambas soluciones: var recipient = $ ("# <% = recipient.ClientID%>"). Val(); AND var recipient = $ (". Recipient"). Val(); [con la clase 'destinatario' agregado al control de la caja de texto], funcionó. :) ¡Gracias! – Kablam

+0

Arghh. Necesito leer jQuery doc, ¿cómo podría perder eso? " en el selector) -. Buen lugar. – Audrius

0

Creo que el selector jQuery le devuelve una lista de objetos. ¿Has probado:

var recipient = $(".recipient")[0].val(); 

ACTUALIZACIÓN

¿Qué pasa con esto, entonces:

var = receptores $ ("receptor: en primer lugar.") Val();.

Tiene una buena ventaja también - se frenará en la primera coincidencia.

+0

Esta es una idea genio, pero lamentablemente no funciona. FireBug dice: "$ (". Recipient ") [0] no está definido". – Kablam

+0

No, aún no hay suerte :(Es un problema de selector, eso está claro. Si ingreso $ ('. False'). Val() ;, con o sin el punto anterior, obtengo el mismo resultado. "Hola undefined , ". – Kablam

+1

¿Puedes verificar y pegar el código HTML producido que ves en un navegador (fuente)? ​​Comprueba si la propiedad del nombre no cambia a la forma habitual de" ctrl00_ "ASP.NET. ¿Qué versión y navegador de jQuery estás usando? Algunas veces me he encontrado con un problema (¿error?) Con jQuery 1.2x cuando no pude usar la identificación de control como selector y tuve que recurrir a este "$ ('[id =" control_id "]')". Prueba $ ('[name = "recipient"]') o $ ('[name^= "recipient"]') si el nombre es cambiado por ASP.NET. – Audrius

3

Si configura el ID de cliente del cuadro de texto asp, debería poder usarlo en JQuery de la misma forma que lo ha hecho, pero con un hash en lugar del punto.

E.g.

ClientID = "recipient" 

then 

    var recipient = $('#recipient').innerHTML() 

or 

    var recipient = $('#recipient').text() 
+0

Lamentablemente, fue en vano. Todavía obtengo el resultado "indefinido". – Kablam

+0

¿Podría mostrarnos los destinatarios y los controles de nombre? – Jimmeh

+0

Por supuesto: Kablam

-3

en ASP.NET, tendrá que escribir de esta manera:

var recipient = $("#<%=recipient.ClientID%>").val();

En MVC, entonces se puede escribir de esta manera:

var recipient = $("#recipient").val();

-1

supongo que los controles asp.net HTML deben tener la propiedad ClientID = "receptor" para acceder al control utilizando ID de cliente en lado del cliente. o no tengo idea!

<asp:TextBox ID="recipient" ClientID="recipient" runat="server" name="recipient" class="inputBox" onChange="addNames()" /> 

pruébalo, esto debería funcionar.

0

A través de esto también puede obtener el botón asp o cualquier control para ese asunto.

var txt_recipient = document.querySelector("input[id*='recipient']"); 
alert(txt_recipient.Value); 

también puede probar querySelectorAll() si tiene varios controles con el mismo id en el lado del cliente.

jQuery Equalent es

$("input[id*='recipient']").val() 
Cuestiones relacionadas