我做的是一个有textbox的弹框,做了enter的判断,如果是回车操作则将文本框中的内容拼接一个<br/>,第一次点开弹框的时候是正常的只拼接一次,但是之后点开弹框时拼接的次数依次累加了,也就是说if(e.keyCode==13){}方法进入到次数是一次累加的,为什么?
$('#versionText').textbox('textbox').keydown(function (e) { if (e.keyCode == 13) { text = $('#versionText').textbox('getValue'); $('#versionText').textbox('setValue',text+"<br/>"); } });
除了自己定义一个变量,让方法只执行一次之外,还可以将此方法拿出来放到弹框事件的外面。
方法一:
$("#add").click(function(){ reloadFlag = true; if(test){ $('#versionText').textbox('textbox').keydown(function (e) { if (e.keyCode == 13) { text = $('#versionText').textbox('getValue'); $('#versionText').textbox('setValue',text+"<br/>"); } }); } test=false;
...... )};
方法二:
$('#versionText').textbox('textbox').keydown(function (e) { if (e.keyCode == 13) { text = $('#versionText').textbox('getValue'); $('#versionText').textbox('setValue',text+"<br/>"); } }); $("#add").click(function(){...... });
你这是每次点开都挂接事件了吧?才会造成多次触发。这样一来每点开一次,就挂一个事件,第二次点开,挂了两个事件。
第三次点开,挂了三个事件....
我不太懂什么叫挂接事件,但是我这样改了之后就可以了,让if只执行一次。我还是不明白之前为什么出现这种情况。
var test=true; if(test){ $('#versionText').textbox('textbox').keydown(function (e) { if (e.keyCode == 13) { text = $('#versionText').textbox('getValue'); $('#versionText').textbox('setValue',text+"<br/>"); } }); } test=false;