Zugriff auf Formular-Elemente mit Hilfe von jquery und DOM
Hier ist die form
<form method="post">
<input type="hidden" name="resulttype" value="Create">
<table>
<tr>
<td>Name</td>
<td><input type="text" id="name" value="Abhishek"/></td>
</tr>
<tr>
<td>User Name</td>
<td><input type="text" id="username" name="username" value="AbhishekSimion"></td>
</tr>
<tr>
<td>Email</td>
<td><input type="text" id="email" name="email" value="[email protected]"></td>
</tr>
<tr>
<td>Department</td>
<td><input type="text" id="department" name="department"></td>
</tr>
<tr><td colspan="2"><input type="button" id="button" value="Done!"></td></tr>
</table>
</form>
hier ist der Javascript-Teil
var x = document.getElementById("name");
var email = $("input#email").val();
var dataString = 'name='+ x + '&email=' + email;
$(function() {
$("#button").click(function() {
callme();
});
});
function callme()
{
alert(dataString);
var msg = $.ajax({
type: "POST",
url: "/temp/AjaxPostSend",
data: dataString,
async: false,
success: function(html){
alert( "Data Saved: " + msg );
}
}).responseText;
}
Warum erhalte ich die Meldung "name=null&email=undefined" in meiner alert-box? Was ist hier falsch?
Hinweis: ich bin mit JQuery v1.5.2
- Es ist möglich, zu serialisieren ein Formular aus und senden Sie es mit ajax, statt der Verkettung alle Werte von hand.
Du musst angemeldet sein, um einen Kommentar abzugeben.
zumindest dieemail
Wert sollte funktionieren...In jedem Fall nicht erstellen Sie die Zeichenfolge manuell. Set
data
auf ein Objekt mit den Werten:Diese Weise, jQuery wird sich darum kümmern die richtige Flucht.
Beachten Sie auch, dass die IDs eindeutig sein müssen. Wenn Sie andere Elemente mit den gleichen IDs weiter auf die Seite, funktioniert es nicht. Änderungen der IDs.
Update:
Den Fluss der code ist nicht korrekt. Dieser Artikel:
ausgeführt werden , bevor die Seite fertig geladen. Das bedeutet, dass (a) die Elemente sind noch nicht verfügbar und b) selbst wenn Sie es wären, würde der Benutzer nicht in der Lage gewesen, um Informationen einzugeben.
Lesen Sie die Werte an der Zeit, die Sie wollen, um das Formular abgeschickt:
Beachten Sie auch, dass
wird nicht funktionieren, da der Ajax-request ist asynchrone. Das bedeutet, dass
callme()
zurückkehren wird, bevor der Ajax-response zur Verfügung. Der Antwort-text ist verfügbar als argument dersuccess
Rückruf.Korrektur: ich sah die
async: false
, aber es schien, ich hatte einen kleinen Fehler in meinem Gehirn ;), In diesem Fall die obige Anweisung würde funktionieren, ja. Aber Sie sollten es vermeiden synchrone Ajax (sollte aufgerufen werden, Sjax dann) fordert auf, es blockiert den client.serialize()
Um den Wert eines Eingangs mit einfachen JavaScript, müssen Sie den Zugriff auf die variable namens
value
.Ihre zweite variable sollte funktionieren wie erwartet, allerdings ist es möglich das weglassen der Eingang von der Auswahl, da die IDs sind immer eindeutig, und es spart ein paar bytes.
Auch, es ist ein einfacher Weg, um senden ein Formular mit ajax. Serialisieren Sie das Formular. Beachten Sie
data: ...
versuchen, diese
DEMO
außerdem können Sie wie unten
Daten: { name: MeinName, E-Mail: mymail }
UPDATE
versuchen mit
<input type="text" id="myname" name="myname" value="Abhishek"/>
und dannvar myname = $('#myname').val()
für das senden von Datum über POST verwenden
id=name
..es zu Verwirrung führen..noch was anderes einstellendocument.getElementById();
- und jQuery-Methodeval();
. verwenden Sie alle mitjQuery
.. und siehe die Antwort von FlexiKlingdata: $('#yourformID').serialize(),
tun? auch istsuccess: function(html){ alert( "Data Saved: " + msg ); }
nur aufgerufen, nachdem der server die Annahme abgeschlossen ist?success
wird aufgerufen, wenn die Anfrage wurde erfolgreich (dh. die Antwort ist nicht 404 oder 500 oder so ähnlich).complete
wird aufgerufen, wenn die Anforderung abgeschlossen ist.complete
stattsuccess
success
wird häufiger verwendet alscomplete
. Aber probieren Sie es einfach.object object
. Ich habe eine situation, wo ich gerne eine andere Funktion aufrufen, erst nachdem der server die Anfrage abgeschlossen ist. wie kann ich es erreichen? auch die Anzeige der Antwortdaten vom server dazwischen (wahrscheinlich nach der kompletten server-Anfrage und ich bekomme Antwort von der server-Seite)async:false, complete: function(msg){ alert( "Data Saved: " + msg ); }
und es funktioniert, ist das gut? oder haben Sie anyother option für mich?[object Object]
dann bedeutet dies einfach, die Daten aus einem array. Wenn Sie mit Chrome oder Firebug verwendenconsole.dir(data)
prüfen Sie das element. Nur rufen die andere Funktion in der callback.ändern
zu
auch dieser Teil:
gehen muss, bevor Sie den callme () - Funktion aufrufen wie diesem:
Da,
den Wert in 'x' ist ein Objekt und kein string, und ich denke, die syntax von " $("input#email")' ist falsch. Versuchen
$(":input[id='email']").val()
Nicht sicher, warum E-Mail geben Sie nicht definierte Wert, aber für Namen, es sollte wie das folgende:
ODER