如果函数没有返回false?

时间:2014-10-13 08:22:05

标签: javascript jquery

我有以下click事件:

$('#planung').click(function(){
    if($current != $('#planungtext')){
        console.log($current);
        console.log($('#planungtext'));
        $($current).removeClass('active');
        setTimeout(function(){$('#planungtext').addClass('active')}, 1000);
        $current = $('#planungtext');
    }
});

我使用日志查看变量和'#planungtext'元素的内容。它们完全相同,但if函数不能按预期工作,因为它仍然会进入它。

在第一次点击元素之前未设置$ current。

我在这里做错了吗?

3 个答案:

答案 0 :(得分:4)

两个jQuery对象指向相同的DOM元素,但它们是不同的数组(jQuery对象本质上只是幕后的数组带有额外的东西)。

使用jQuery is http://api.jquery.com/is/来测试相同的选择器是否匹配它们:

if(!$current.is('#planungtext')){

“手动”检查的最快方法是:

if ($current[0].id !== '#planungtext'){

在评论中提到$ current是一个jQuery变量(良好的命名标准),但最初是undefined,在这种情况下,几乎每个发布的解决方案都会崩溃。你需要初始化$ current到一个空的jQuery对象,以提供最一致的行为(jQuery对象永远不应该被定义为不需要这样使用,否则你需要重新包装它。例如$($current)我不知道建议作为未初始化的jQuery变量的解决方案):

var $current = $();   // $() returns an empty jQuery object

答案 1 :(得分:1)

假设$current是另一个jQuery对象,你不能比较那样的对象。但是,您可以比较它们的内在价值。变化:

$current != $('#planungtext')

要:

$current[0] != $('#planungtext')[0]

答案 2 :(得分:0)

如果您的比较2 html输入元素,您可能只想检查 id 属性。

由于 #planungtext 已经是唯一标识符。

$($current).attr('id') !== 'planungtext'