In meiner Phonegap-Anwendung habe ich ursprünglich .live verwendet, nachdem ich wusste, dass diese veraltet ist, also habe ich auf .on-Funktion umgestellt.

Verwenden von Live:

$("#addEditForm").live("submit", function(e) {
    var data = {
        firstname: $("#mFirstname").val(),
        lastname: $("#mLastname").val(),
        gender: $("#mGender").val(),
        dob: $("#dob").val(),
        email: $("#mEmail").val(),
        password: $("#mPassword").val(),
        conformPassword: $("#mConformPassword").val(),
        id:$("#mId").val()
    };
    alert(data.firstname);
    e.preventDefault();

Bei Verwendung von ON:

$("#addEditForm").on("submit",function(e) {
alert("hi");
    var data = {
        firstname: $("#mFirstname").val(),
        lastname: $("#mLastname").val(),
        gender: $("#mGender").val(),
        dob: $("#dob").val(),
        email: $("#mEmail").val(),
        password: $("#mPassword").val(),
        conformPassword: $("#mConformPassword").val(),
        id: $("#mId").val()
    };
    alert(data.firstname);
    saveDatas(data, "#editPage", function() {
        $.mobile.changePage("index.html", {
            reverse: true
        });
    });
    e.preventDefault();

function saveDatas(details, cb) {
alert(details.firstname);
alert(details.firstname);
if (details.firstname == "") details.firstname = "[No Title]";
**dbShell.transaction(function(tx) {**
    if (details.id == "") {
        tx.executeSql("insert into nameDetail(firstname,lastname,gender,dob,email,password,conformPassword,date) values(?,?,?,?,?,?,?,?)", [details.firstname, details.lastname, details.gender, details.dob, details.email, details.password, details.conformPassword, new Date()]);
    } else {
        tx.executeSql("update nameDetail set firstname=?, lastname=?,gender=?,dob=?,email=?,password=?,conformPassword=?,date=? where id=?", [details.firstname, details.lastname, details.gender, details.dob, details.email, details.password, details.conformPassword, new Date(), details.id]);
    }
}, dbErrHandler, cb);

}

Es zeigt eine Ausnahme wie E/Web Console(23700): Uncaught Error: TYPE_MISMATCH_ERR: DOM Exception 17 at file:///android_asset/www/js/index.js:51 dieser ** Zeile.

Hier

addEditForm is my form id

Mein Problem ist when using the live die Warnung wird funktionieren und meinen Namen geben, when using on die Warnung wird nicht angezeigt, versucht auch Pageshow, pageload nichts Erfolg.

Für eine Funktion verweise ich auf dieses Dokument

Hilfe benötigen...

-2
Arut 21 Nov. 2013 im 14:14

5 Antworten

Beste Antwort

Was ist los mit .live ()

Die Verwendung der .live () -Methode wird nicht mehr empfohlen, da spätere Versionen von jQuery bessere Methoden bieten, die keine Nachteile haben. Insbesondere bei der Verwendung von .live () treten folgende Probleme auf:

JQuery versucht, die vom Selektor angegebenen Elemente abzurufen, bevor die Methode .live () aufgerufen wird. Dies kann bei großen Dokumenten zeitaufwändig sein. Verkettungsmethoden werden nicht unterstützt. Zum Beispiel $ ("a"). Find (". Offsite, .external"). Live (…); ist ungültig und funktioniert nicht wie erwartet. Da alle .live () -Ereignisse an das Dokumentelement angehängt sind, nehmen Ereignisse den längsten und langsamsten Pfad, bevor sie behandelt werden. Das Aufrufen von event.stopPropagation () in der Ereignisbehandlungsroutine ist unwirksam, um Ereignisbehandlungsroutinen zu stoppen, die weiter unten im Dokument angehängt sind. Das Ereignis wurde bereits in das Dokument übertragen. Die .live () -Methode interagiert mit anderen Ereignismethoden auf überraschende Weise, z. B. $ (document) .unbind ("click") entfernt alle Klick-Handler, die durch einen Aufruf von .live () angehängt werden! Was sind die Hauptunterschiede zwischen den Funktionen .live () und .on ()?

Funktionalität: Anstatt den Körper und die Dokumentebene in die Luft zu sprudeln, wird er direkt für das Dokument registriert.

Verwendung: Wenn wir uns die 3 Methoden zum Anhängen von Hauptereignissen ansehen, können wir feststellen, dass sie sehr ähnlich sind. Bemerkenswerterweise hat .live () keinen Selektorparameter.

$ (Selektor) .live (Ereignisse, Daten, Handler); // jQuery 1.3+ $ (Dokument) .delegate (Selektor, Ereignisse, Daten, Handler); // jQuery 1.4.3+ $ (document) .on (Ereignisse, Selektor, Daten, Handler); // jQuery 1.7+ Leistung: Ich wollte einen jsPerf-Test erstellen, fand aber heraus, dass bereits jemand die harte Arbeit geleistet hat! Hier sind die Ergebnisse der Leistung von .live () und .on (). Wie Sie sehen können, übertrifft .on () den Vorgänger .live () und ist fast drei- oder viermal so schnell!

0
user1374 21 Nov. 2013 im 10:31

Wenn Sie .live() verwenden, wird das Ereignis an das Dokumentobjekt gebunden.

$(document).on("submit",'#addEditForm', function(e) {
})
1
Arun P Johny 21 Nov. 2013 im 10:15

Versuche dies

$(document).on("submit", "#editFormSubmitButton", function(e) {
    alert('Val');
});
2
Sridhar R 21 Nov. 2013 im 10:16

In der Funktion "On Submit" ändert sich die Formular-ID. Ist dies die Ursache für Ihr Problem?

1
Suganthan Madhavan Pillai 21 Nov. 2013 im 10:21