我有以下情况,我不明白为什么它不起作用。我在表中有几个<input>
字段,每次用户点击其中一个输入时,我都会检查此元素是否已经在此表的输入列表中,如果不是,我只需添加它。输入列表中的官方添加是用户在<input>
元素中至少点击一次时。我是这样做的:
var element_input = {"Element": ""};
var input_element = [];
$("#input"+i).click(function(){
element_input.Element = $(this);
var found = false;
$.each(input_element,function(i){
if(input_element[i].Element === $(this))
input_element.splice(i,1,element_input);
found = true;
});
if(!found){
input_element.push(element_input);
}
});
但这绝对不行!我不知道那里有什么问题。他插入列表中的第一个元素因为是空的,这意味着直到代码结束并且在同一个迭代中再次进入.each循环,就像我再次点击元素并且他应该开始再次读取代码,当然他添加了这个元素,因为条件为真。最后,我有一个无限的列表,多次使用相同的元素。有人能帮助我吗? THX !!
答案 0 :(得分:1)
更准确的解决方案可能是使用类来表示所选元素,然后在需要时可以只过滤那些元素。
此外,您可以为所有输入元素添加公共类,并使用它来添加单击处理程序。
$(".input").click(function () {
$(this).toggleClass('selected');
});
//then when you need to get all the selected elements
var input_element = $('.input.selected');
//if you want input_element to be an array then use
var input_element = $('.input.selected').get();
答案 1 :(得分:1)
对我来说,你的代码中有太多问题,有些部分对我来说并不清楚。这种代码的和平:
$.each(input_element,function(i){
if(input_element[i].Element === $(this))
input_element.splice(i,1,element_input);
found = true;
});
发现总是如此,检查括号,input_element[i].Element === $(this)
总是假的,因为你正在比较两个对象。
这是你用更好的方式写的例子。 http://jsfiddle.net/ux6hhefe/2/
答案 2 :(得分:0)
您的代码不起作用,因为默认情况下,相等运算符通过引用检查对象是否相等。在你的情况下,它们总是不同,因为每个$()调用都返回新对象。
您可以通过单行代码进行检查:
$(this)==$(this)
尝试使用this
代替$(this)