Javascript 第二次单击时未删除jQuery数组
嗨 单击图像时,我会将图像名称属性传递给一个数组,该属性工作正常,但每当用户再次单击取消选择时,我都会尝试删除当前名称$this,这并没有发生,而是将其完全删除为空数组。 而且,每次在第一个元素后面加逗号时:-Javascript 第二次单击时未删除jQuery数组,javascript,jquery,arrays,Javascript,Jquery,Arrays,嗨 单击图像时,我会将图像名称属性传递给一个数组,该属性工作正常,但每当用户再次单击取消选择时,我都会尝试删除当前名称$this,这并没有发生,而是将其完全删除为空数组。 而且,每次在第一个元素后面加逗号时:- JS : questionCount = 0; $('.q2 .product-multiple').on('click',function(e){ if($(this).hasClass('selectTag')){
JS :
questionCount = 0;
$('.q2 .product-multiple').on('click',function(e){
if($(this).hasClass('selectTag')){
questionCount--;
$(this).removeClass('selectTag');
removeItem = "Removing Clicked element Name - " + $(this).find('img').attr('name')
alert(removeItem);
console.log("Should be Removed here.. " +" "+ getTagsNameArray)
}
else {
questionCount++;
$(this).addClass('selectTag');
getTagsNameArray = new Array();
getTagsName = getTagsName + "," + $(this).find('img').attr('name');
getTagsNameArray.push(getTagsName)
console.log("Passing Value in Array - " +" "+ getTagsNameArray)
}
});
$('.q2-get-answer').on('click', function(){
getTagsName = getTagsName +" / "+ $('.q2-answer').find('.product-multiple.selectTag img').attr('name');
alert(getTagsName)
console.log(getTagsName);
})
html :
<div class="q2">
<label for="q2">What type of symptoms that your child has?</label>
<div class="q2-answer" id="q2">
<div class="product-multiple">
<img alt="doctor select" src="http://i.istockimg.com/file_thumbview_approve/45921804/5/stock-photo-45921804-lake-view.jpg" name="gassy">
<div>Gassy</div>
</div>
<div class="product-multiple">
<img alt="doctor select" src="http://i.istockimg.com/file_thumbview_approve/45921804/5/stock-photo-45921804-lake-view.jpg" name="fussy">
<div>Fussy</div>
</div>
<div class="product-multiple">
<img alt="doctor select" src="http://i.istockimg.com/file_thumbview_approve/45921804/5/stock-photo-45921804-lake-view.jpg" name="diahrea">
<div>Diahrea</div>
</div>
<div class="product-multiple">
<img alt="doctor select" src="http://i.istockimg.com/file_thumbview_approve/45921804/5/stock-photo-45921804-lake-view.jpg" name="spitup">
<div>Spit Up</div>
</div>
<div class="product-multiple">
<img alt="doctor select" src="http://i.istockimg.com/file_thumbview_approve/45921804/5/stock-photo-45921804-lake-view.jpg" name="constipation">
<div>Constipation</div>
</div>
</div>
<div class="q2-get-answer">
Q3 click me
</div>
</div>
谢谢你的回答
我是否可以为此创建一个通用函数,因为有许多问题具有相同的功能?
有什么想法吗
再次感谢您将向数组追加一个字符串,从而将数组转换为一个字符串:getTagsName+, 您需要使用getTagName.push$this.find'img.attr'name向数组添加新元素,而不是向数组中追加字符串。可以使用indexOf和splice删除项。 如果要打印数组,只需使用getTagsName.join。这将把数组变成逗号分隔的字符串。试试这个 变量getQ1Answer、getQ2Answer、getQ3Answer、getQ4Answer、getQ5Answer、getQ6Answer、sliderValue、selectMonth、q1answer、getTags; var getTagsName=; var gettagsnamerary=新数组; 问题计数=0; $'.q2.产品多个'。单击,函数E{ 如果$this.hasClass'selectTag'{ 问题计数-; $this.removeClass'selectTag'; var index=gettagsnamerary.indexOf$this.find'img.attr'name'; 如果索引!==-1{ gettagsnamerary.index,1; } }否则{ 问题计数++; $this.addClass'selectTag'; gettagsnamerary.push$this.find'img.attr'name'; } };
您需要在函数外部声明数组。您使用推送数组中的项,这是不需要的。您的JS代码如下所示:
var getQ1Answer, getQ2Answer, getQ3Answer, getQ4Answer, getQ5Answer, getQ6Answer, sliderValue, selectMonth, q1answer, getTags;
var getTagsName = "";
var getTagsNameArray = new Array(); // here you should create an array
questionCount = 0;
$('.q2 .product-multiple').on('click',function(e){
if($(this).hasClass('selectTag')){
questionCount--;
$(this).removeClass('selectTag');
removeItem = "Removing Clicked element Name - " + $(this).find('img').attr('name')
alert(removeItem);
var doubleSelect = $(this).find('img').attr('name');
var index = getTagsNameArray.indexOf(doubleSelect);
console.log(index)
if (index > -1) {
getTagsNameArray.splice(index, 1);
}
console.log("Should be Removed here.. " +" "+ getTagsNameArray)
}
else {
questionCount++;
$(this).addClass('selectTag');
getTagsNameArray.push($(this).find('img').attr('name')); //change is here
console.log("Passing Value in Array - " +" "+ getTagsNameArray)
}
});
$('.q2-get-answer').on('click', function(){
getTagsName = getTagsName +" / "+ $('.q2-answer').find('.product-multiple.selectTag img').attr('name');
alert(getTagsName)
console.log(getTagsName);
})
首先,你不应该有这么多的变量。只是一个变量,用于将项从阵列推送/拼接到阵列
=>拼接方法通过删除现有元素和/或添加新元素来更改数组的内容
语法:array.strippestart,deleteCount[,item1[,item2[,…]]
var gettagsnamerary=[];
$'.q2.产品多个'。单击,函数E{
var item=$this.find'img'.attr'name';
如果$this.hasClass'selectTag'{
$this.removeClass'selectTag';
gettagsnameray.patchegettagsnameray.indexOfitem,1; }否则{ $this.addClass'selectTag'; gettagsnameray.pushitem; } console.loggetTagsNameArray.join','; }; $'.q2获取答案'。单击,函数{ console.loggetTagsNameArray.join','; } .产品倍数{ 浮动:左; 利润率:10px; } .产品多重img{ 宽度:200px; 高度:150像素; } .产品多重img:悬停{ 光标:指针; } .ui状态默认值, .ui小部件内容.ui状态默认值, .ui小部件标题.ui状态默认值{ 光标:指针; } .消化工具{ 填充:10px; 利润率:10px; 边框:1px实心ccc; } .消化工具。q1回答李, .消化工具。第二季度回答李, .消化工具。第三季度回答李, .消化工具。第四季度回答李, .消化工具。q5回答李, .消化工具.问题6回答李{ 列表样式类型:无; 显示:内联块; } .消化工具。q1获得答案, .消化工具。第二季度获得答案, .消化工具。第三季度获得答案, .消化工具。第四季度获得答案, .消化工具。q5获得答案, .消化工具.问题6:获取答案{ 边框:1px实心f00; 填充:10px; 显示:内联块; 光标:指针; } .消化工具.产品, .消化工具.产品多{ 显示:内联块; } .消化工具.产品img, .消化工具.产品多重img{ 宽度:150px; 高度:180像素; 光标:指针; } .选择标签{ 边框:2个实心00257a; } .q2获得答案{ 边缘顶部:20px; 清除:左; 边框:1px实心900; 背景:f00; 光标:指针; 宽度:200px; 填充:20px; 颜色:fff; } 您的孩子有什么样的症状? 气体 挑剔的 迪亚里亚 吐 便秘 Q3点击我
这是因为每次取消选择$'.q2.product multiple'时,都会创建一个新的getTagsNameArray数组。请参阅单击处理程序中的else语句 如果我正确理解了您的问题,您想要一个包含所选图像的名称属性的数组吗?在这种情况下: 在单击处理程序外部声明并创建getTagsNameArray 单击图像后,将名称添加到数组中 再次单击以取消选择,在数组中查找名称并 移除它。 这是一个现场演示 您可以使用array.push、splice、join
问题是什么?无法获取..请检查console.log->每当用户选择图像名称属性添加到数组中时,当用户取消选择图像名称属性必须从ArrayTanks中删除时,1的用途是什么?getTagsNameArray.indexOfitem,1的用途是1,我们还可以创建一个用于其他问题的公共函数吗?请指教
var getTagsNameArray = [];
$('.q2 .product-multiple').on('click', function(e) {
// get the name of the image
var name = $(this).find('img').attr('name');
if($(this).hasClass('selectTag')) {
// it was selected, now unselected
// so remove its name from the array
// see: http://stackoverflow.com/questions/5767325/remove-a-particular-element-from-an-array-in-javascript
$(this).removeClass('selectTag');
var index = getTagsNameArray.indexOf(name);
getTagsNameArray.splice(index, 1);
} else {
// selected it
// and add name to array
$(this).addClass('selectTag');
getTagsNameArray.push(name);
}
});
$('.q2-get-answer').on('click', function(){
alert('selected: ' + getTagsNameArray.join(', '));
})
var selected = [];
$('.q2 .product-multiple').on('click',function (e) {
if($(this).hasClass('selectTag')){
$(this).removeClass('selectTag');
var name = $(this).find('img').attr('name');
// remove the name from selected
for (var i=0; i<selected.length; i++) {
if (name === selected[i]) {
selected.splice(i, 1);
}
}
console.log("Should be Removed here.. ", name);
console.log("Passing Value in Array - ", selected.join(', '))
}
else {
$(this).addClass('selectTag');
var name = $(this).find('img').attr('name');
selected.push(name);
console.log("Passing Value in Array - ", selected.join(', '))
}
});
$('.q2-get-answer').on('click', function () {
alert(selected.join(', '));
console.log(selected.join(', '));
});