选中复选框后函数执行两次
function executed twice after checkbox checked
我使用以下代码
$("#cc1").unbind('click').click(function(e) {
//somefunction
});
为了在单击CC1按钮后执行功能。有了这段代码,一切正常。
当我使用以下代码时
$("#cc1").unbind('click').click(function(e) {
if($('#cc').is(':checked')){
}
//somefunction
});
为了执行与上述相同的功能,但是当选中 cc 复选框并单击按钮 pay 时,该功能被多次执行,我在数据库读取中收到错误......
问题出在哪里?
单击支付按钮时,应用程序会将一些变量传递给函数以进行更新 - 将数据导入数据库。如果选中 cc,应用程序将传递不同的数据。上面的页面包含一个按钮(支付),按下时以现金付款。如果勾选了抄送,则使用信用卡付款。
根据您的描述,可能以下代码可以帮助您:
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
</head>
<body>
<div>
<form id="form">
<input type="button" name="cc1" value="cc1" id="cc1">
<input type="button" name="pay" value="pay" id="pay">
<input type="checkbox" name="cc" id="cc">
</form>
<script>
$("#cc1").unbind('click').click(function(e) {
//somefunction
alert("test cc1");
});
$("#pay").unbind('click').click(function(e) {
if($('#cc').is(':checked')){
//somefunction
alert("credit");
}
else{
//anotherfunction
alert("cash");
}
});
</script>
</body>
如果您有一个动态侦听器被绑定并且发生这种情况,则会出现此问题。这将触发 2 次点击,因为第二个侦听器没有解绑。这些点击堆叠在一起。
.HTML:
<input type="checkbox" id="cc1"> Double Click<br>
<input type="checkbox" id="cc2"> Single Click
JS: jsfiddle
// Static Listener
$("#cc1").unbind('click').click(function(e) {
checkClicked($(this));
});
$("#cc2").unbind('click').click(function(e) {
checkClicked($(this));
});
/* Dynamic Listener - Typically happens when Ajax data is being loaded,
* DOM nodes are being added & listeners are being re-attached to the
* new form fields:
*/
$("#cc1").click(function(e) { // .unbind('click')
checkClicked($(this));
});
$("#cc2").unbind('click').click(function(e) {
checkClicked($(this));
});
function checkClicked(chkBx) {
console.log('clicked');
if(chkBx.prop('checked')){
console.log('isChecked: yes');
} else {
console.log('isChecked: no');
}
}
因此,请确保您的代码没有附加不正确的动态侦听器。如果将 .unbind('click') 添加到第二个动态侦听器,则它只有 1 次单击操作。
哦,顺便说一句:.is(':checked')在jQuery中不起作用。您必须使用 .prop('checked') 来获取复选框上的真/假条件。
相关文章:
- 防止双击执行两次jQuery post请求
- 单击元素两次后执行操作
- 为什么这个函数执行了两次
- 使用node.js模块,在什么情况下模块会被执行两次
- 必须点击两次按钮才能执行功能
- 是否可以执行两次匿名函数
- onKeyUp 导致代码执行两次
- 选中复选框后函数执行两次
- ng 类指令调用执行两次
- 提交按钮有时会以 html 形式执行两次操作
- 必须单击按钮两次才能执行功能 - jQuery
- AngularJs 基本应用程序执行两次
- jQuery AJAX POST 执行两次
- 防止脚本在执行时运行两次
- jquery ready 函数在我单击锚标记时执行两次
- document.getElementById 导致 jquery 文档准备执行两次
- CasperJS thenOpen() 执行两次
- 脚本执行两次,但时间戳相同
- 在 IE 上,表达式执行两次
- 在angularjs中两次执行控制器的routeparams中的特殊字符