2009-03-12 22 views
1

Ich habe den folgenden Code, aber wenn die nicht gefunden wird, wird immer noch die getDateFormat Funktion ausgeführt. Das ergibt für mich keinen Sinn.Warum wird die Funktion ausgeführt, wenn keine Elemente gefunden werden?

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"; 
} 

Antwort

5

Die GetDateFormat Funktion so schnell ausgeführt wird, wie Javascript analysiert wird, weil es in einer Objektliteral Notation .

Ihr Ausdruck als

$(function() { 
    $("input.formdate").datepicker({ 
     changeMonth: true, 
     changeYear: true, 
     dateFormat: <RESULT_FROM_CALLING_getDateFormat()> 
    }); 
}); 
+0

Das macht Sinn! – Schotime

6

Alte Antwort:
(basierend auf Fehlverständnis Frage - siehe Kommentare)
Da Sie die Funktion sind aufrufen und das Ergebnis vorbei, statt dessen, was Sie sein sollte doing: einen Verweis auf die Funktion übergeben (dh sie als Variable behandeln).

tun:

$(function() { 
    $("input.formdate").datepicker({ 
     changeMonth: true, 
     changeYear: true, 
     dateFormat: getDateFormat 
    }); 
}); 

Update:
Nachdem die jQuery UI Datepicker API überprüft, 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 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 mehr oder weniger lesbar ist.


(Es gibt wahrscheinlich noch einen kürzeren Weg als das, aber ich muß jetzt gehen.)

+0

+1 richtige Antwort bewertet wird, obwohl ich „passing einen Verweis auf die Funktion selbst“ denken etwas klarer – Kieron

+0

Einverstanden „um den Wert der Funktion übergeben“ wäre, wasn, dass Wortlaut Es ist großartig. Ich habe es aktualisiert und Ihren Vorschlag aufgenommen. :) –

+0

die Übergabe eines Verweises auf die Funktion funktioniert nicht. Es gibt nur leere Zeichenfolge zurück, wenn ich ein Datum auswähle. Hmmm???? – Schotime

Verwandte Themen