3

在条件语句失败后,我试图返回 false。

我有

$('#btn').click(function() {
    $('.title').each(function() {
        if (id == $(this).attr('id')) {
            alert('The name already exists.')
            return false; //I hope my codes would stop here if condition is true
        }
    })
    // my codes still call the doSomething function even if the conditional         
    //statement is true
    doSomething();
})​

我只想在以下doSomething情况下调用该函数id != $(this).attr('id).

下面的代码给了我想要的东西,但看起来很难看。

$('#btn').click(function() {
    var nameExist = false
    $('.title').each(function() {
        if (id == $(this).attr('id')) {
            alert('The name already exists.')
            nameExist = true;
            return false; //I hope my codes would stop here if condition is true
        }
    })
    if (!nameExist) {
        doSomething();
    }
})​

有人对此有更好的方法吗?非常感谢!

4

4 回答 4

4

切换到基本的 for 循环。

$('#btn').click(function() {
    var elements = $(".title");
    for (var i = 0; i < elements.length; i++) {
        if (id == elements[i].id) {
            alert('The name already exists.')
            return false; //I hope my codes would stop here if condition is true
        }
    }

    doSomething();
})​
于 2012-12-18T20:14:07.610 回答
3

如果不介意提前退出循环,可以使用 jQueryfilter

$('#btn').click(function(){
    var itensWithSameName = $('.title').filter(function(){
      return id == $(this).attr('id');
    })

    if(itensWithSameName.size() > 0)
        alert('The name already exists.');
});
于 2012-12-18T20:13:53.617 回答
3

你不需要遍历元素,你可以通过 id 和 class 来获取它,例如,#myId.myClass

$('#btn').click(function() {
    if($('#' + id + '.title').length) {
        alert('The name already exists.');
    } else {
        doSomething();
    }
});
于 2012-12-18T20:12:55.893 回答
1

我认为你所拥有的很好,但这避免了额外的条件:

var func = doSomething;
...
if (id == $(this).attr('id')) {
   func = $.noop;
...

func();
于 2012-12-18T20:07:52.823 回答