2009-10-23 16 views
11

Ich habe ein paar Asp: Textfeld Steuerelemente in einem Formular auf einer Webseite, unten ist ein Ausschnitt. Der erste ist ein Feld, in dem der Empfänger eingegeben wird, der andere ist ein größerer Textbereich, in den der Name des Empfängers geladen werden soll, zusammen mit anderem Text.Abrufen von Wert von Asp: Textfeld mit 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> 

ist eine Standard-Nachricht mit diesem Code in diese zweite Textbox mit der Verwendung von JQuery geladen:

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

Das funktioniert gut, wird die Meldung angezeigt.
Wenn ein Benutzer den Namen eines Empfängers oder seinen eigenen Namen in einem der anderen Textfelder eingibt, wird addNames() ausgelöst. Diese Funktion fügt den Namen des Empfängers der Standardnachricht im Feld Benutzermeldung hinzu.

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); 
    } 

Problem ist, dass die beiden Variablen Empfänger und Absender "undefiniert" sind.

Hallo undefined,
Dies ist eine Nachricht.

Mit freundlichen Grüßen,
undefined




tatsächliche Frage: Was ist der richtige Code den Wert von einem asp abzurufen: Textbox wenn diese

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

nicht funktioniert?

Die Ausgabe im html ist wie folgt:

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

Ich bin mit JQuery v1.3.2, mit Firefox v3.5.3.

Antwort

17

Soweit ich

var recipient = $(".recipient") 

tun sagen können, werden alle DOM-Elemente mit einer Klasse des Empfängers auswählen. Ihr Eingabefeld hat eine Klasse von "inputBox".

Sie müssen durch ihre ID wählen Sie das # mit

So:

var recipient = $("#recipient") 

Aber Sie verwenden ASP.NET-Steuerelemente, die es eine eindeutige ID auf dem Server generiert geben, so dass es einzigartig ist. (In Ihrem Fall ist es ctl00_contentPlaceHolderRightColumn_recipient)

So wählen Sie

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

verarbeiteten für einige Syntaxfehler

+0

Das brachte mich auf den richtigen Weg. Ihre Lösung: var recipient = $ ("# <% = recipient.ClientID%>"). Val(); AND var recipient = $ (". Recipient"). Val(); [mit der Klasse 'Empfänger' hinzugefügt, um das Textfeld Steuerelement], arbeitete. :) Vielen Dank! – Kablam

+0

Arghh. Ich muss selbst jQuery doc lesen, wie könnte ich das vermissen ". im Selektor) -. Gute Stelle. – Audrius

0

Ich denke, dass jQuery-Selektor gibt Ihnen eine Liste von Objekten zurück. Haben Sie versucht:

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

UPDATE

Was diese dann:

var Empfänger = $ ("Empfänger: zuerst.") Val();.

Es hat auch einen schönen Vorteil - bremst beim ersten Spiel.

+0

Dies ist eine geniale Idee, aber leider funktioniert es nicht. FireBug sagt: "$ (". Recipient ") [0] ist undefined". – Kablam

+0

Nein, immer noch kein Glück :(Es ist ein Selektorproblem, das ist klar. Wenn ich $ ('. Bogus') .val(); mit oder ohne vorangestelltem Punkt eintrage, bekomme ich das gleiche Ergebnis. "Hallo undefiniert , ". – Kablam

+1

Können Sie den erzeugten HTML-Code prüfen und einfügen, den Sie in einem Browser (Quelle) sehen? Überprüfen Sie, ob die Namenseigenschaft nicht auf die übliche" ctrl00_ "ASP.NET-Art geändert wird. Welche jQuery-Version und welchen Browser verwenden Sie? Ein paar Mal habe ich ein Problem (Bug?) Mit jQuery 1.2x festgestellt, als ich die Steuer-ID nicht als Selektor verwenden konnte und auf dieses "$ ('[id =" control_id "]') zurückgreifen musste" $ ('[name = "empfänger"]') oder $ ('[name^= "empfänger"]') wenn der Name von ASP.NET geändert wird – Audrius

3

Wenn Sie die clientID des ASP-Textfelds festlegen, sollten Sie in der Lage sein, das in JQuery auf dieselbe Weise wie Sie zu verwenden, aber mit einem Hash anstelle des Punkts.

z.

ClientID = "recipient" 

then 

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

or 

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

Leider ohne Erfolg. Ich bekomme immer noch die "undefined" s als Ausgabe. – Kablam

+0

Können Sie uns die Empfänger- und Namenskontrollen zeigen? – Jimmeh

+0

Natürlich: Kablam

-3

in ASP.NET tun müssen, müssen Sie auf diese Weise schreiben:

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

In MVC, dann können Sie auf diese Weise schreiben:

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

-1

Ich denke, die asp.net HTML-Steuerelemente ClientID = "Empfänger" Eigenschaft haben, muss die Steuerung mit Client-ID für den Zugriff auf in Client-Seite. oder ich habe keine Ahnung!

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

versuchen Sie es, das sollte funktionieren.

0

Durch diese können Sie auch Asp-Taste oder irgendeine Kontrolle für diese Angelegenheit bekommen.

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

Sie können auch querySelectorAll() versuchen, wenn Sie mehrere Steuerelemente mit derselben ID in Client-Seite haben.

jQuery Equalent ist

$("input[id*='recipient']").val() 
Verwandte Themen