如何在jquery中的onclick事件中使用.each()

时间:2015-10-20 10:40:28

标签: javascript jquery

我有以下情况,我不明白为什么它不起作用。我在表中有几个<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 !!

3 个答案:

答案 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)