Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么不需要的数据被推送到我的数组中?_Javascript_Jquery_Arrays_Forms_Jquery Plugins - Fatal编程技术网

Javascript 为什么不需要的数据被推送到我的数组中?

Javascript 为什么不需要的数据被推送到我的数组中?,javascript,jquery,arrays,forms,jquery-plugins,Javascript,Jquery,Arrays,Forms,Jquery Plugins,我想创建一个表单字段,其中可以使用“添加”按钮插入多个数据,按下“确定或提交”后,表单中的所有数据都会被发布 按“添加”后,数据被推入一个名为formData.values的数组中。但是,当我按下“添加”按钮时,行为是不稳定的 Its output on console is like: 1st trial -- typing "a" and pressing add button... formData.values = [a] 2nd trial -- typing "b" and pres

我想创建一个表单字段,其中可以使用“添加”按钮插入多个数据,按下“确定或提交”后,表单中的所有数据都会被发布

按“添加”后,数据被推入一个名为formData.values的数组中。但是,当我按下“添加”按钮时,行为是不稳定的

Its output on console is like:
1st trial -- typing "a" and pressing add button... formData.values = [a]
2nd trial -- typing "b" and pressing add button... formData.values = [a, a, b]
3rd trial -- typing "c" and pressing add button... formData.values = [a, a, b, a, b, c]
我希望按如下方式推送值:

1st trial --- form.data.values should be [a]
2nd ---                        should be [a,b]
3rd ---                        should be [a,b,c]
这是我的jQuery代码:您也可以在

(函数($){
$.fn.multiData=函数(选项){
var$this=这个;
var id;//添加按钮的id
变量默认值={
addMoreButton:是的,
addCancelButton:true
};
var设置=$.extend({},默认值,选项);
var格式数据;
var添加按钮;
this.on('focusin',':input',function(){
变量$inputName=$(此);
id=$inputName.data('more');
addButton=$(id);
addButton.show();
//从中获取价值
formData.name=$inputName.attr('name');
log(formData.name+'formData.name');
});
this.on('focusout',':input',function(){
//id=$(this.data('more');
//id='#'+id;
var focussedBox=$(此项);
var textBoxData=$.trim($(this.val());
如果(textBoxData==''){
addButton.hide();//$(id.hide();
}
否则{
addButton.on('click',函数(事件){
event.preventDefault();
//**这三行**是我需要帮助的地方
console.log('initial'+textBoxData);
formData.values.push(textBoxData);
log('ln 37 testBoxData='+textBoxData+'formData.values='+formData.values+''+formData.values.length);
$(this.hide();//$(id.hide())或addButton.hide(),但稍后将无法工作。不知道为什么。
focussedBox.val(“”);//添加数据后清除字段。
formData.show();
});
}
});
formData={
名称:空,
值:[],
show:function(){
$('#result').html(this.values);
}
};
控制台日志(设置);
返回此;//以启用链接
};
//表单div被多次使用,因此需要存储它以便快速响应
var formDiv=$(“#form div”);
formDiv.removeClass('no-js');
//检查javascript是否打开。如果关闭禁用=true
var disabled=formDiv.hasClass('no-js');
如果(!已禁用){
formDiv.multiData();
}
否则{
警报(“javascript已禁用”);
}
}(jQuery));

试试这样的方法

formData.show();
$( this).unbind( "click" );//just add this line
原因:因为您正在绑定,所以每次悬停时都要单击。所以一旦你们点击按钮,许多点击事件就会被触发


这就成功了,但我不明白原因。你们能澄清一下吗?在你们绑定的每一个focusout上都很简单,点击事件到按钮。n次focusout,n次绑定事件。所以当点击按钮时,调用n次点击函数。
formData.show();
$( this).unbind( "click" );//just add this line