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

tiure 发布于 2019-03-09 javascript 最后更新 2019-03-09 14:34 0 浏览

我有一个函数,我试图检查一个值是否已经存在。但是,即使存在值,它仍然返回-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);
    }
已邀请:

fearum

赞同来自:

However even though values exist it's still returning -1
我不知道如何证明,因为你没有提供任何样本输入。然而,在您调用itemExists的方式中,this keywordundefined / window,而$(this).attr('id')可能会产生undefined。 要解决这个问题,请使用itemExists.call(this)或将DOM元素(甚至$(this)?)存储在局部变量中并使用它,或者甚至将itemExists移动到处理程序之外并使用显式参数调用它。
I'm trying to get my if/else statement working that if an item exists…
如您所知,返回的索引是-1。这意味着要检查一个元素是否包含在数组中,您需要将其与-1进行比较,而不是将每个非零数字转换为true
if (jQuery.inArray(detailID, itemArr) != -1)

nvelit

赞同来自:

这是因为detailIDitemArr是函数itemExists()的本地,并且是您的if条件所在的undefined。 将它移到外面,应该修复它。

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