Uncaught ReferenceError-Funktion ist nicht definiert
Habe ich eine variable namens als myVar
. Sein Wert ändert sich, wenn Sie klicken Sie auf die checkbox. Wenn die checkbox geklickt wird erhalten Sie eine alert-box zeigt seinen Wert als 1. Wenn Sie es deaktivieren, es zeigt wieder eine alert-box mit dem Wert 0. Dies ist korrekt.
Nun habe ich 2 Fragen.
-
Wenn ich versuche, das Dokument vorzulegen, indem Sie auf
Submit
dann bekomme ich eine Fehlermeldung wieUncaught ReferenceError: confirm_submit is not defined
. Warum? -
Wenn ich das
confirm_submit
Funktion aus derready event
ich nicht den Fehler dann aber in diesem Fall wird die zweite alert-box, die im inneren confirm_submit Funktion zeigtundefined
fürmyVar
. Warum? Ist diemyVar
nicht erreichbarconfirm_submit
Funktion?
Code:
<html>
<head>
<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript" src="js/jquery.treeTable.js"></script>
<script type="text/javascript">
var myVar;
jQuery(document).ready(function() {
$("#myTable2").treeTable({
expandable: true,
clickableNodeNames: true,
initialState: "expanded",
});
document.getElementById('myVar').addEventListener('click', myVar, false);
function myVar() {
if (document.getElementById('myVar').checked === true) {
myVar = 1;
} else {
myVar = 0;
}
alert(myVar);
}.................
some functions....................
function confirm_submit() {
alert(myVar);
if (confirm('Press OK to confirm')) {
document.myform.myVar.value = myVar;
document.myform.submit();
reload_parent_and_close_window();
}
}
and some more functions.....................
});
</script>
</head>
<body>
<form name="myform" id="myform" action="$action" method="post" onsubmit="return false;">
<input type="checkbox" name="myVar" id="myVar" value="myVar">Text here
</form>
<a href="javascript:confirm_submit()">Submit</a>
</body>
</html>
- vielleicht sollten Sie es vermeiden, wählen Sie Funktion, Namen, die identisch zu den bestehenden globalen Funktion, wie
confirm()
: die reichen sollten die Funktion aufrufen oderwindow.confirm
? - Anders ist es in meinem code habe ich umbenannt, weil hier der Datenschutz Gründen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Scheinen Sie zu scheitern, um zu begreifen, ein paar grundlegende Konzepte hier einige JavaScript-Programmierung-Grundlagen.
Was hast du erwartet hier passieren? myVar die Funktion und die variable myVar in diesem Bereich sind die gleiche Sache. Wenn Sie eine variable deklarieren und dann deklarieren Sie eine Funktion mit dem gleichen Namen, wird die Funktion ersetzen Sie die variable in den stack. Auch gibt es keinen block-scope in JavaScript. Alles deklariert eine Funktion deklariert wird, zunächst durch den compiler, unabhängig davon, zu blockieren. So...
Nicht davon ausgehen, scoping ist die gleiche wie Java oder C++.
Auch, wenn Sie etwas machen will explizit Globale, dann machen Sie es explizit. Versuchen Sie das umbenennen der myVar-Funktion, um etwas sinnvolles wie "onClick_myVar". Dann sofort vor, wo die Funktion deklariert ist, setzen Sie die Funktion innerhalb einer closure und erklären sich mit den state-variable:
Funktioniert das nur einmal. Sobald Sie geben die Funktion
myVar
ersetzen Sie es mit dem Wert (Funktion ist ein Objekt in JS), der entweder mit 1 oder 0, und es wird nicht mehr eine function-Objekt, sondern eine Zahl.das problem ist... Sie haben den gleichen Namen für Ihre var und das input-element..
also entweder ändern Sie Ihre Eingabe-element-id someother variable oder ändern alle Ihre Namen myVar