我写了这段代码:
$(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);
})
有人能帮帮我吗?谢谢
答案 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_mod
和mail_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_mod
和mail_address
的值,这样您就可以看到它们是否符合您的预期,并且还应该显示你找不到dato_in_mod
的原因。
如果你可以备份并解释你在click
事件中想要实现的目标,我们可能会提供更好的方法。