当前位置:  开发笔记 > 编程语言 > 正文

为什么在没有找到元素时运行该函数?

如何解决《为什么在没有找到元素时运行该函数?》经验,为你挑选了2个好方法。

我有以下代码,但是如果input.formdate找不到它仍然会运行该getDateFormat函数.这对我来说没有意义.

有谁知道原因?

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

Peter Bought.. 6

旧答案:(
基于对问题的误解 - 请参阅注释)
因为您正在调用函数并传递其结果,而不是您应该做的事情:传递对函数的引用(即将其视为变量).

做这个:

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

更新:
在检查jQuery UI DatePicker API之后,您需要将字符串传递给dateFormat.
如果您不希望执行函数,除非至少有一个带有formdate类的输入,您需要这样做:

if ( $('input.formdate').length > 0 )
{
    $("input.formdate").datepicker
    (
        { changeMonth: true
        , changeYear: true
        , dateFormat: getDateFormat()
        }
    );
}

或者,您可以使用内联执行此操作:

$("input.formdate").datepicker
(
    { changeMonth: true
    , changeYear: true
    , dateFormat:
        $('input.formdate').length > 0 ? getDateFormat() : 'dd-mm-yy'
    }
);

虽然这或多或少可读,但值得商榷.


(可能还有比这更短的路,但我现在必须走.)



1> Peter Bought..:

旧答案:(
基于对问题的误解 - 请参阅注释)
因为您正在调用函数并传递其结果,而不是您应该做的事情:传递对函数的引用(即将其视为变量).

做这个:

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

更新:
在检查jQuery UI DatePicker API之后,您需要将字符串传递给dateFormat.
如果您不希望执行函数,除非至少有一个带有formdate类的输入,您需要这样做:

if ( $('input.formdate').length > 0 )
{
    $("input.formdate").datepicker
    (
        { changeMonth: true
        , changeYear: true
        , dateFormat: getDateFormat()
        }
    );
}

或者,您可以使用内联执行此操作:

$("input.formdate").datepicker
(
    { changeMonth: true
    , changeYear: true
    , dateFormat:
        $('input.formdate').length > 0 ? getDateFormat() : 'dd-mm-yy'
    }
);

虽然这或多或少可读,但值得商榷.


(可能还有比这更短的路,但我现在必须走.)



2> Chetan Sastr..:

解析Javascript后立即运行getDateFormat函数,因为它在对象文字表示法中.

您的表达式被评估为

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

推荐阅读
mobiledu2402852357
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有