1

我想使用基于点击的 jquery 将数据保存在数组(或任何最佳方法)中。我已经设置了 jquery,其中用户只能单击 2 个元素(<div>标签),如果他们想选择其他东西,他们需要取消选择他们选择的元素之一。这些元素在我要存储的标签中具有“data-id=”。

如何仅为选定的项目保存数据 ID。这是否意味着如果用户取消选择,需要删除数组中的数据(或首选哪种最佳方法)?

$('.media-search').hover(function(){
    var $this = $(this);
    var dataid = $this.data('id');
    $this.toggleClass('highlight');
}).click(function(){
if($('.selectMedia').length < 2 || $(this).hasClass('selectMedia'))
{
    $(this).toggleClass('selectMedia');
}else{

    alert('need to unselect item')      

}
});     

谢谢!

4

2 回答 2

0

我不确定我是否理解你,但我的解决方案是

var dataIds = new Array();

$('.media-search').click(function(){
 if($(this).hasClass('selectMedia')){
  $(this).removeClass('selectMedia');
  dataIds.splice(dataIds.indexOf($this.data('id')),1); 
 }else{
  if(dataIds.leght==2){
   $(this).addClass('selectMedia');
   dataIds.push($this.data('id'));
  }else{
   alert("only 2 items");
  }
 }
}
于 2014-10-21T20:34:25.650 回答
0

我不是 100% 确定这是您要求的,但是如果您需要一个数组,您可以在任何时候使用此函数并将其存储在一个变量中:

function getArray() {
    var data = [],
        media = $('.selectMedia');

    for(var i = 0; i < media.length; i++) {
        data[i] = media.eq(i).attr("data-id");
    }

    return data;
}

我的建议是在切换类click在函数中使用此函数。

另外,我注意到您在方法dataid内部声明hover,并且该变量将不再存在于方法外部,即一旦您完成悬停,该值现在超出范围。因此,如果您确实声明了一个数组来存储此方法的结果,请在任何事件处理程序之外执行它,以便它保持在范围内。

于 2014-10-21T20:06:55.937 回答