我想使用基于点击的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')
}
});
谢谢!
我不能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
函数中使用此函数。
此外,我注意到您在hover
方法中声明了dataid
,并且该变量将不再存在于方法之外,即,一旦您完成悬停,该值现在就超出了范围。因此,如果您确实声明了一个数组来存储此方法的结果,请在任何事件处理程序的外部执行,以便它将保留在作用域中。
我不确定我是否理解你,但我的解决方案是
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");
}
}
}