单击后函数运行两次
Function runs twice after click
我目前正在从事一个利用输入来创建项目列表的项目。我添加了一些程序,但是删除一个项目是我遇到问题的地方。
这些项目通过 .push() 添加到数组中,删除的方法是通过 .splice() 方法。该函数正确拼接了正确的数组元素,但最终进行了第二次传递并删除了它之前的元素。如何阻止拼接发生不止一次?
$(skill_add_button).click(function(e){ //on add input button click
var skill_input=document.getElementById("skill_input").value;
document.getElementById("skill_input").value = "";
e.preventDefault();
if(s < 12){ //max input box allowed
if (skill_input==""){
skillset = skill_arr.join('');
alert(skillset);
} else {
s++; //text box increment
$(skill_wrap).append('<div class="skill_tag" id="skill_tag'+s+'">'+skill_input+'</div>'); //add input box
skill_arr.push(skill_input+'|s|');
alert(skill_arr);
$('.skill_tag').hover(function(){
$(this).css("background-color", "#C14330");
$(this).css("cursor", "pointer");
}, function(){
$(this).css("background-color", "#04CA29");
});
$('.skill_tag').click(function() {
var skill_id = $(this).attr('id');
var index = skill_id.split('skill_tag').pop();
skill_arr.splice(index,1);
$('#'+skill_id).remove();
alert(skill_arr);
s--;
});
}
}
if(s > 11) {
$(skill_add_button).remove();
}
});
如果我尝试将我的 .skill_tag 点击功能放在 skill_add_function 之外,它根本不起作用。
$('body').on('click','.skill_tag',function(){
//TODO::add code here
})
每次点击 $(skill_add_button)
都会创建一个新的 div.skill_tag
但同时会在页面的所有 .skill_tag
元素上添加 .click 事件。
将您生成的 div 保存到一个变量中,并使用此变量添加点击事件。
var myDiv = '<div class="skill_tag" id="skill_tag'+s+'">'+skill_input+'</div>';
$(skill_wrap).append(myDiv); //add input box
[...]
myDiv.hover(function(){
[...]
myDiv.click(function(){
我目前正在从事一个利用输入来创建项目列表的项目。我添加了一些程序,但是删除一个项目是我遇到问题的地方。 这些项目通过 .push() 添加到数组中,删除的方法是通过 .splice() 方法。该函数正确拼接了正确的数组元素,但最终进行了第二次传递并删除了它之前的元素。如何阻止拼接发生不止一次?
$(skill_add_button).click(function(e){ //on add input button click
var skill_input=document.getElementById("skill_input").value;
document.getElementById("skill_input").value = "";
e.preventDefault();
if(s < 12){ //max input box allowed
if (skill_input==""){
skillset = skill_arr.join('');
alert(skillset);
} else {
s++; //text box increment
$(skill_wrap).append('<div class="skill_tag" id="skill_tag'+s+'">'+skill_input+'</div>'); //add input box
skill_arr.push(skill_input+'|s|');
alert(skill_arr);
$('.skill_tag').hover(function(){
$(this).css("background-color", "#C14330");
$(this).css("cursor", "pointer");
}, function(){
$(this).css("background-color", "#04CA29");
});
$('.skill_tag').click(function() {
var skill_id = $(this).attr('id');
var index = skill_id.split('skill_tag').pop();
skill_arr.splice(index,1);
$('#'+skill_id).remove();
alert(skill_arr);
s--;
});
}
}
if(s > 11) {
$(skill_add_button).remove();
}
});
如果我尝试将我的 .skill_tag 点击功能放在 skill_add_function 之外,它根本不起作用。
$('body').on('click','.skill_tag',function(){
//TODO::add code here
})
每次点击 $(skill_add_button)
都会创建一个新的 div.skill_tag
但同时会在页面的所有 .skill_tag
元素上添加 .click 事件。
将您生成的 div 保存到一个变量中,并使用此变量添加点击事件。
var myDiv = '<div class="skill_tag" id="skill_tag'+s+'">'+skill_input+'</div>';
$(skill_wrap).append(myDiv); //add input box
[...]
myDiv.hover(function(){
[...]
myDiv.click(function(){