Warum läuft die Funktion, wenn es keine Elemente gefunden?
-
10-07-2019 - |
Frage
Ich habe den folgenden Code, aber wenn die input.formdate
nicht noch gefunden wird, wird die getDateFormat
Funktion ausgeführt werden. Das macht keinen Sinn für mich.
Kennt jemand den Grund?
$(function() {
$("input.formdate").datepicker({
changeMonth: true,
changeYear: true,
dateFormat: getDateFormat()
});
});
function getDateFormat()
{
var format = 'DMY';
if (document.edit_form && document.edit_form.date_format)
format = document.edit_form.date_format.value;
if (format = "DMY")
return "dd-mm-yy";
else
return "mm-dd-yy";
}
Lösung
Die GetDateFormat Funktion so schnell ausgeführt wird, wie Javascript analysiert wird, weil es in einer Objektliteral Notation ist.
Ihr Ausdruck wird ausgewertet, wie
$(function() {
$("input.formdate").datepicker({
changeMonth: true,
changeYear: true,
dateFormat: <RESULT_FROM_CALLING_getDateFormat()>
});
});
Andere Tipps
Alte Antwort:
(basierend auf mis Verständnis der Frage - siehe Kommentare)
Da Sie die Funktion und vorbei sein Ergebnis anrufen, statt dessen, was Sie tun sollten:. Einen Verweis auf die Funktion übergeben (das heißt, es als eine Variable Behandlung)
Tun Sie dies:
$(function() {
$("input.formdate").datepicker({
changeMonth: true,
changeYear: true,
dateFormat: getDateFormat
});
});
Update:
die jQuery UI Datepicker API Nach der Überprüfung, müssen Sie eine Zeichenfolge Datumsformat zu übergeben.
Wenn Sie nicht Ihre Funktion ausführen sollen, wenn mindestens ein Eingang mit einer Klasse von formdate ist, müssen Sie dies tun:
if ( $('input.formdate').length > 0 )
{
$("input.formdate").datepicker
(
{ changeMonth: true
, changeYear: true
, dateFormat: getDateFormat()
}
);
}
Alternativ, können Sie es mit einem Inline tun könnten, wenn:
$("input.formdate").datepicker
(
{ changeMonth: true
, changeYear: true
, dateFormat:
$('input.formdate').length > 0 ? getDateFormat() : 'dd-mm-yy'
}
);
Obwohl es fraglich ist, ob das ist mehr oder weniger lesbar.
(Es gibt wahrscheinlich noch einen kürzeren Weg als das, aber ich muss jetzt gehen.)