jQuery .inArray If / Else总是返回-1

时间:2013-04-11 16:02:29

标签: javascript jquery

我有一个函数,我正在尝试检查值是否已存在。然而,即使值存在,它仍然返回-1。我试图让我的if / else语句工作,如果一个项目存在它“警告”,如果它不运行addItem()函数;

$(".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);
    }

2 个答案:

答案 0 :(得分:1)

这是因为detailIDitemArr是函数itemExists()的本地,undefined条件是if

把它移到外面,应该修理它。

...
var detailID = $(this).attr('id'); 
var itemArr = [];
function itemExists() {
   ...
}
...

答案 1 :(得分:0)

  

然而即使存在值,它仍然会返回-1

我不知道如何证明,因为您没有提供任何样本输入。但是,在您拨打itemExists的方式undefinedwindow / $(this).attr('id')时,undefined可能会产生itemExists.call(this)

要解决此问题,请使用$(this)或将DOM元素(甚至itemExists?)存储在本地变量中并使用它,或者甚至将-1移到处理程序之外并调用它有明确的论据。

  

如果项目存在,我正试图让我的if / else语句正常工作......

如您所见,返回的索引为true。这意味着要检查一个元素是否包含在数组中,您需要将其与-1进行比较,而不是将每个非零数字转换为if (jQuery.inArray(detailID, itemArr) != -1)

{{1}}