0

値が既に存在するかどうかを確認しようとしている関数があります。ただし、値が存在する場合でも、-1 が返されます。アイテムが存在する場合は「アラート」を実行し、存在しない場合は関数 addItem(); を実行するという if/else ステートメントを機能させようとしています。

$(".detail-view button").on("click", function () {
    itemExists();

    function itemExists() {
        var detailID = $(this).attr('id');
        var itemArr = [];
        $("input#lunchorder_item_entry_id").each(function (index) {
            var lunchItemID = $(this).val();

            itemArr.push(lunchItemID);
        });

        addItem();

        alert(jQuery.inArray(detailID, itemArr));

        /*
        if (jQuery.inArray(detailID, itemArr)) {
            alert("You have already added this item. If you want to change item details, please remove the item and re-add it to your cart. Thank You!");
        } else {
            // the element is not in the array
            addItem();
        } */

        console.log(itemArr);
    }
4

2 に答える 2

0

ただし、値は存在しますが、それでも -1 を返します

サンプル入力を提供しなかったため、それを証明する方法がわかりません。itemExistsそれでも、thisキーワードを呼び出す方法はundefined/windowであり、$(this).attr('id')おそらく結果はundefined.

これを修正するには、ローカル変数にitemExists.call(this)DOM 要素 (または ?) を使用または格納してそれを使用するか、ハンドラーの外に移動して明示的な引数で呼び出します。$(this)itemExists

アイテムが存在する場合に if/else ステートメントを機能させようとしています…</p>

お気づきのとおり、返されるインデックスは-1. つまり、要素が配列に含まれているかどうかを確認するには、ゼロ以外のすべての数値を にキャストするのではなく、-1 と比較する必要がありますtrue

if (jQuery.inArray(detailID, itemArr) != -1)
于 2013-04-11T17:32:51.880 に答える