Jquery .one() 函数不会阻止表单输入期间的多次点击事件
Jquery .one() function doesn't prevent multi click event during form input
我有这样的代码:
$(document).ready(function() {
$("#some-items").one("click", ".comment-form-gonder input", function(e) {
e.preventDefault();
$("body").css("cursor", "wait");
//this part inserts user comment to the written comments below with animation.
...
问题是当我双击发送按钮时,评论入两次。我该如何防止这种情况?
尝试删除 preventDefault(); 和
禁用按钮以确保
$(this).attr('disabled', 'disabled');
var n = 0
$( "div" ).one( "click", function() {
n++;
if (n % 2 == 0){
$(this).text('Foo');
}else{
$(this).text('Bar');
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>Foo</div>
在处理程序中调用e.preventDefault();
.one()
会使表单在执行第一种one('event')
后无法阻止默认行为。之后,同一event
将按预期提交表格。
防止使用on()
提交默认表单,并使用one()
执行其余操作:
$(document).ready(function(){
$('.comment-form-gonder input[type="submit"]')
.on('click', function(e) {
e.preventDefault();
})
.one('click', function() {
// This part executes only on first click:
$("body").css("cursor", "wait");
// rest of your code...
});
});
JSFiddle
您也可以在第一次点击后disable
提交输入,但在某些情况下,可能需要保持其"可点击"(例如通知用户他不能提交两次表单)。为此,您可以将点击状态存储在输入data
属性中,并在以后使用该状态:
$(".comment-form-gonder input[type='submit']").on("click", function(e) {
e.preventDefault();
if($(this).data('clicked') == 'clicked'){
return alert('already submitted!');
}
// This part executes only on first click:
$(this).data('clicked', 'clicked');
$("body").css("cursor", "wait");
// rest of your code...
});
JSFiddle
相关文章:
- 是否可以为HTML5输入滑块触发oninput事件
- 使用onkeyup JS事件检查输入的值是否唯一
- 访问代码生成的输入元素上的keyup事件
- 无线电输入更改的jQuery事件未启动
- JS事件未更改输入禁用属性
- 在表单中的输入字段上提交事件
- 是否可以在数字输入框中的小按钮中添加事件侦听器
- 如何获取按钮点击事件输入的当前值
- 在放置目标时,输入并离开自定义事件
- 为什么不是't;输入“;此处触发事件
- 替代输入:基于按钮点击事件的文本更改处理程序
- 检查 jQuery 中的递增-递减事件输入类型编号
- Ng-model绑定触摸事件输入的值失败
- 从onkeyup事件输入触发JS函数
- 用于关键事件输入验证的Javascript正则表达式故障排除帮助
- Jquery在点击事件输入
- 如何检测javascript事件输入的变化
- 更改事件输入字符
- 触发多个事件/输入字段的功能并计算它们
- 组合组件上的onBlur事件(输入+按钮)