jQuery.inArray返回-1

时间:2014-08-03 10:55:53

标签: jquery return

我写了这段代码:

    $(document).on('click','.remove_email',function(event) {
        dato_in_mod=(($(event.target).text()).replace(" ",""));
        mail_address.splice((jQuery.inArray(dato_in_mod,mail_address)),1);
        $('#email_add').val(mail_address);
    })

但是有问题。数组中的拼接不起作用,因为正如我在console.log中看到的那样,jQuery.inArray返回-1。我还尝试添加“”:

$(document).on('click','.remove_email',function(event) {
        dato_in_mod=(($(event.target).text()).replace(" ",""));
        mail_address.splice((jQuery.inArray(‘“‘+dato_in_mod+’"',mail_address)),1);
        $('#email_add').val(mail_address);
    })

有人能帮帮我吗?谢谢

2 个答案:

答案 0 :(得分:1)

如果值不在数组中,

inArray将仅返回-1。您已经说过,您确定该值在数组中,但如果inArray正在返回-1,则不是inArray isn't broken。问题是:关于数组中的值与dato_in_mod中的值有什么不同

我的猜测是它在一个地方或另一个地方有一个或多个空格。您删除空格的代码

dato_in_mod=(($(event.target).text()).replace(" ",""));

仅删除字符串中的第一个空格。如果有多个,则其余的留在字符串中。字符串上的尾随空格很难看到,特别是通过console.log。使用浏览器内置的调试器停止inArray行上的代码,然后使用调试器检查dato_in_modmail_address变量。您可能会在其中一个或另一个上找到额外的空格,使它们不匹配。

要从字符串中删除所有空格,请将.replace(" ","")更改为.replace(/ /g,"")

dato_in_mod=(($(event.target).text()).replace(/ /g,""));

旁注:你不需要围绕单个表达式()。编译/解释后,这两行是相同的:

dato_in_mod=(($(event.target).text()).replace(/ /g,""));
dato_in_mod=$(event.target).text().replace(/ /g,"");

附注2:在将inArray传递给splice之前,检查从var index = jQuery.inArray(dato_in_mod, mail_address); if (index >= 0) { mail_address.splice(index, 1); } 返回的索引可能是个好主意:

splice

如果你没有,并且值不在数组中,{{1}}会将负数解释为距离数组末尾的偏移量,并删除错误的元素。< / p>

答案 1 :(得分:0)

编辑:我看到拼写错误。您在一个地方使用data_in_mod,在另一个地方使用dato_in_mod。这两个必须显然是相同的拼写。


jQuery.inArray()返回-1,当您正在搜索的数组中找不到您要搜索的对象时,或者您没有正确的参数。因此,在名为dato_in_mod的数组中找不到mail_address,或者您的参数错误。

您可以通过添加console.log()语句来调试自己的代码,以输出dato_in_modmail_address的值,这样您就可以看到它们是否符合您的预期,并且还应该显示你找不到dato_in_mod的原因。

如果你可以备份并解释你在click事件中想要实现的目标,我们可能会提供更好的方法。