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

要素を反復処理する必要はありません。IDとクラスで取得できます#myId.myClass

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

ループを早く終了しなくてもかまわない場合は、jQueryを使用できますfilter

$('#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 に答える
1

私はあなたが持っているものは大丈夫だと思いますが、これは余分な条件を回避します:

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

func();
于 2012-12-18T20:07:52.823 に答える