Testen, ob der Wert eine Funktion ist
Brauche ich, um zu testen, ob der Wert von einem Formular onsubmit
ist eine Funktion. Das format ist in der Regel onsubmit="return valid();"
. Gibt es eine Möglichkeit zu sagen, wenn dies ist eine Funktion, und wenn es kündbar? Mit typeof nur zurück, dass es eine Zeichenfolge, die hilft mir nicht viel.
BEARBEITEN: natürlich, ich verstehe, dass "return valid();" ist ein string. Ich habe replace
d bis auf "valid();", und auch "valid()". Ich möchte wissen, ob eine der beiden ist eine Funktion.
BEARBEITEN: Hier finden Sie den code, die möglicherweise helfen, zu erklären, mein problem:
$("a.button").parents("form").submit(function() {
var submit_function = $("a.button").parents("form").attr("onsubmit");
if ( submit_function && typeof( submit_function.replace(/return /,"") ) == 'function' ) {
return eval(submit_function.replace(/return /,""));
} else {
alert("onSubmit is not a function.\n\nIs the script included?"); return false;
}
} );
EDIT 2: Hier ist der neue code. Es scheint, dass ich trotzdem ein "eval", weil aufrufende Formular.submit() nicht ausgelöst bestehenden onsubmits.
var formObj = $("a.button").parents("form");
formObj.submit(function() {
if ( formObj[0].onsubmit && typeof( formObj.onsubmit ) == 'function' ) {
return eval(formObj.attr("onsubmit").replace(/return /,""));
} else {
alert("onSubmit is not a function.\n\nIs the script included?");
return false;
}
} );
Vorschläge über möglicherweise, wie das besser zu tun?
InformationsquelleAutor der Frage Glen Solsberry | 2009-04-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
EDIT : fehlende parameter f in Funktion testOnsubmitAndSubmit
Den oben genannten arbeiten sollten, unabhängig davon, ob Sie ordnen die
onsubmit
HTML-Attribut zuweisen oder es in JavaScript:InformationsquelleAutor der Antwort Grant Wagner
Versuchen
InformationsquelleAutor der Antwort artemb
Könnte man einfach die
typeof
- operator zusammen mit einem ternären operator-kurz:Wenn es eine Funktion nennen wir es und senden Sie es zurück Wert, ansonsten einfach zurück
true
Edit:
Ich bin mir nicht ganz sicher, was Sie wirklich wollen, zu tun, aber ich werde versuchen zu erklären, was geschehen könnte.
Wenn Sie erklären Ihre
onsubmit
code in Ihre html -, es bekommt verwandelt sich in eine Funktion und damit seine callable von der JavaScript - "Welt". Das bedeutet, dass diese beiden Methoden gleichwertig sind:Diese beiden werden beide Funktionen und beide sind aufrufbar. Sie können testen, von denen mit der
typeof
- Betreiber, der sollte yeld das gleiche Ergebnis:"function"
.Wenn Sie jetzt weisen Sie einen string an das "onsubmit" - Eigenschaft über JavaScript, es bleibt ein string, also nicht kündbar. Beachten Sie, dass wenn Sie die
typeof
Betreiber gegen Sie, erhalten Sie"string"
statt"function"
.Ich hoffe das vielleicht klären ein paar Dinge. Dann wieder, wenn Sie wissen möchten, ob eine solche Eigenschaft (oder alle Bezeichner für die Rolle) ist eine Funktion aufrufbar, die
typeof
Betreiber sollten den trick tun. Obwohl ich nicht sicher bin, ob es richtig funktioniert über mehrere frames.Cheers
InformationsquelleAutor der Antwort Pablo Cabrera
Welchen browser verwenden Sie?
Dieser gibt mir "
function
" im IE7 und FireFox.InformationsquelleAutor der Antwort Greg
Stellen Sie sicher, dass Sie anrufen typeof auf die tatsächliche Funktion, nicht einem string-literal:
InformationsquelleAutor der Antwort matt b
mithilfe eines string-basierende variable, die als Beispiel und unter Verwendung
instanceof Function
Sie registrieren die Funktion..weisen Sie die variable...check die variable ist der name der Funktion...vor der Arbeit... weisen Sie die Funktion, um neue var...dann die Funktion aufrufen.
InformationsquelleAutor der Antwort
Können Sie versuchen, ändern diese Technik, um Ihre Bedürfnisse anzupassen:
InformationsquelleAutor der Antwort cletus
form.onsubmit wird immer eine Funktion, wenn definiert als ein Attribut des HTML-form-element. Es ist eine Art der anonymen Funktion an ein HTML-element, welches die diese Zeiger gebunden an das FORMULAR-element und hat auch einen parameter mit dem Namen
event
die die Angaben über das submit-Ereignis.Unter diesen Umständen verstehe ich nicht, wie man einen string als Ergebnis einer typeof-operation. Sollten Sie mehr details, besseren code.
Bearbeiten (als Antwort zu deinem zweiten edit):
Glaube ich, dass die Ereignisprozedur für das HTML-Attribut ausgeführt wird, unabhängig von den oben genannten code. Weiter mehr, Sie könnten versuchen, zu stoppen, irgendwie, aber, es scheint, dass FF 3, IE 8, Chrome 2 und Opera 9 sind die Ausführung der HTML-Attribut-handler in den ersten Platz, und dann befestigt man (ich habe nicht getestet mit jQuery, aber mit addEventListener und attachEvent). Also... was sind Sie versuchen zu erreichen, genau?
Übrigens, dein code funktioniert nicht, weil Ihr regulärer Ausdruck extrahieren, den string "valid();", das ist definitiv nicht eine Funktion.
InformationsquelleAutor der Antwort Ionuț G. Stan
Wenn es ein string ist, könnte man annehmen /hoffen, es ist immer von der form
analysieren für den Namen der Funktion, und dann sehen, ob diese Funktion definiert ist, mit
InformationsquelleAutor der Antwort millimoose
Gut,
"return valid();"
ist ein string, also so richtig.Wenn Sie möchten, um zu überprüfen, ob es eine Funktion angefügt stattdessen, Sie könnten versuchen, diese:
InformationsquelleAutor der Antwort Seb
Ich denke, die Quelle der Verwirrung ist die Unterscheidung zwischen einem Knoten s Attribut und die entsprechenden Eigenschaft.
Bist du mit:
Bist du direkt Lesen, die
onsubmit
Attribut's Wert (die muss ein string sein). Stattdessen sollten Sie den Zugriff auf dieonsubmit
Eigenschaft der Knoten:Hier ein kurzer test:
Damit ergibt sich:
InformationsquelleAutor der Antwort Ates Goral
InformationsquelleAutor der Antwort TStamper
Können Sie immer verwenden Sie eine der typeOf-Funktionen, die auf JavaScript blogs wie Chris West. Mit einer definition wie der folgenden für die
typeOf()
Funktion funktionieren würde:Diese Funktion (die erklärt wird in den globalen Namensraum kann z.B. so verwendet werden:
Wenn es eine Funktion "Funktion" wird zurückgegeben. Wenn es ein string", "String" zurückgegeben. Andere mögliche Werte sind dargestellt hier.
InformationsquelleAutor der Antwort Xavier Botomon
InformationsquelleAutor der Antwort xfix
Eine einfache überprüfung wie dies wird Sie wissen lassen, wenn es vorhanden/definiert:
InformationsquelleAutor der Antwort Kon