0

これが私のif声明です:

そしてフィドル: http://jsfiddle.net/setMa/

$('#addamenity').click(function () {
    var id = $('.editblock').find('#id').val();
    var amenity = $("#amenity").val();

    var dataString = {
        id: id,
        amenity: amenity
    };
    console.log(dataString);
    if (amenity != '' || id != '') {
        $.ajax({
            type: "POST",
            url: "classes/add_amenities.php",
            data: dataString,
            cache: false,
            async: false,
            success: function (html) {
                $('.editunitamenities').load('classes/display_amenities.php?id=' + id);
            }
        });
    } else {
        alert('You must SAVE your changes to the new unit before adding amenities.');
    }
});

さて、私のコンソールログは明らかに何のIDを示して""いますか? を||外すifか、テキスト フィールドを空白のままにすると、問題なく動作します。

4

4 に答える 4

1

あなたの質問からは、あなたが何を探しているのか本当にわかりません。条件付きテストの評価に不満を感じているようです。論理「または」演算子は、「その条件のいずれかが真である場合、このステートメントは真である」ことを意味します。したがって、「amenity」、「id」、またはその両方が空の文字列と「大まかに等しい」かどうかを確認しています。つまり、amenity、id、またはその両方が割り当てられている場合、「if」ステートメント ブロックにあるものは何でも実行されます。以下に小さなコード例を示しますが、繰り返しになりますが、何を求めているのかわかりにくいです。

function aTest (amenity, id) {
    aTest.count += 1;
    console.log('### Test # ', aTest.count);
    console.log('amenity = ', amenity);
    console.log('id = ', id);
    if (amenity != '' || id != '') {
        console.log('amenity, id, or both: ' +
                    'is not kinda equal to an empty string');
    }
}
aTest.count = 0;

aTest('', '');
aTest('', 'x');
aTest('x', '');
aTest('x', 'x');
于 2013-11-18T00:47:42.057 に答える
1

少なくとも 1 つの条件が である限り、論理 OR 演算子は true を返しますtrue。これは、あなたの場合、いずれかの値が空白でない場合、ifステートメントが常に実行されることを意味します。これは、 が空白であっても、が空白でなくても、ステートメントが合格することを意味します。これが、OR が達成することです。idamenity

実際、論理 OR 演算子はショートサーキットであるためid、式 :の値もチェックせず(amenity != '' || id != '')、左側が評価されます。と評価された場合true、ステートメント全体がtrueになり、ifブロックが評価されます。右側は無視されます。

が false と評価された場合amenity != ''、OR 演算子は単純に を返しますid != ''。左側が false であるため、右側のみが式全体の値を決定し、それが返されます。である場合true少なくとも 1 つの条件がtrueであり、ifブロックが評価されます。である場合false、両方ともあり、ifブロックはスキップされます。

コードを空白以外の ID に対してのみ評価したい場合の解決策は、 id: のみをチェックすることですif (id != '')。実際、真実性の JavaScript の世界では、単に と言うことができif (id)ます。必要なのはそれだけです。

if (id) {
    // do ajax post
}
else {
    // log errors
}
于 2013-11-17T05:46:28.930 に答える
1

チェックする前にログに記録しています。変化する

var dataString ={id:id,amenity:amenity};
console.log(dataString);    
if (amenity != '' || id != '')
{

if (amenity != '' && id != '')
{
    var dataString ={id:id,amenity:amenity};
    console.log(dataString);    

AND (OR ではなく) が必要です。そうしないと、dataString に空白が含まれるためです (一方が空白で、もう一方が空白でない場合)。

于 2013-11-17T04:49:03.160 に答える
-1

修正しました。

AND私が欲しいときにみんなが提案している理由がわかりませんOR。両方が空白のときにのみ失敗するようにしたい場合は、&&. 違いが分かる…?

.ajax()の値に関係なく を実行しないようにします#amenity。なぜそれが機能しなかったのか理解できませんでした。代わりに、何が入っているかは気にしないので、#amenityなぜそれをチェックすることにしましたか? 私はそのチェックアウトを取りましたが、すべて正常に動作します。

if (id != '')
    {
        var dataString ={id:id,amenity:amenity};
        console.log(dataString);    
        $.ajax({        
            type: "POST",
            url: "classes/add_amenities.php",
            data: dataString,
            cache: false,
            async:false,
            success: function(html)
            {
                //$('.editunitamenities').html(html);
                $('.editunitamenities').load('classes/display_amenities.php?id='+id);
            }
        });
        //$('.editunitamenities').load('.editunitamenities');
    }else { alert('You must SAVE your changes to the new unit before adding amenities.'); }
于 2013-11-17T04:55:09.347 に答える