如果查询因AND而失败但与OR一起使用

时间:2012-08-25 13:21:10

标签: javascript jquery regex json

我在keyup-event上使用jQuery搜索JSON树。如果输入等于所需的输入,则输入将被禁用。

现在我需要调用一个函数,如果它们都被填充并且正确的话。 if查询很长,所以我把它们写成变量。

我试过了,但失败了

if (simple_present && simple_past && past_participle) {
    alert('All right!');
}

现在,当我写这样的内容时,它有效

if (simple_present || simple_past || past_participle) {
    alert('All right!');
}

这是what I have so far的小提琴。

有什么想法吗?

BTW:将if if查询与reg表达式结合起来的最佳方法是什么?

3 个答案:

答案 0 :(得分:2)

您在每个元素的同一事件处理程序中运行以下所有代码:

$this.attr('id') == 'simple_present'
$this.attr('id') == 'simple_past'
$this.attr('id') == 'past_participle'

他们不可能都是真的,所以&&可以保证给你false

答案 1 :(得分:2)

考虑一下:

var json = {
    "vocables": {
        "irregular": {
            "sein": {
                "simple_present": "be",
                "simple_past": "was were",
                "past_participle": "been"
            },
            "schlagen": {
                "simple_present": "beat",
                "simple_past": "beat",
                "past_participle": "beaten"
            },
            "werden": {
                "simple_present": "become",
                "simple_past": "became",
                "past_participle": "become"
            }
        }
    }
};

var word = $( 'h1' ).text();

$( 'input' ).on( 'keyup', function () {
    if ( this.value === json.vocables.irregular[ word ][ this.id ] ) {
        $( this ).prop( 'disabled', true ).next( 'input' ).focus();
    }

    if ( $( 'input:not(:disabled)' ).length === 0 ) {
        alert( 'SUCCESS' );
    }
});

现场演示: http://jsfiddle.net/NnAMu/1/

如您所见,我有:

  • 更改了JSON结构以更好地满足我的需求,
  • 将当前单词缓存到变量中。

通过这些更改,生成的“keyup”处理程序代码更加简单。

答案 2 :(得分:0)

在if:

之前添加一个调试行
alert( simple_present.toString() + '\n' + simple_past.toString() + '\n' + past_participle.toString() );