默认情况下,jquery切换调用preventDefault(),因此默认设置不起作用。 你不能点击一个复选框,你不能点击链接等等
是否可以恢复默认处理程序?
答案 0 :(得分:77)
就我而言:
$('#some_link').click(function(event){
event.preventDefault();
});
$('#some_link').unbind('click');
是恢复默认操作的唯一方法。
答案 1 :(得分:55)
非常简单
让我们假设你做了类似
的事情document.ontouchmove = function(e){ e.preventDefault(); }
现在要将其恢复到原来的状态,请执行以下操作...
document.ontouchmove = function(e){ return true; }
来自website。
答案 2 :(得分:16)
答案 3 :(得分:11)
function DoPrevent(e) {
e.preventDefault();
e.stopPropagation();
}
// Bind:
$(element).on('click', DoPrevent);
// UnBind:
$(element).off('click', DoPrevent);
答案 4 :(得分:9)
在某些情况下*您最初可以return false
而不是e.preventDefault()
,然后当您要将默认值恢复为return true
时。
*当您不介意事件冒泡并且未将e.stopPropagation()
与e.preventDefault()
一起使用时的含义
另见similar question(也在堆栈溢出中)
或者在复选框的情况下,您可以使用以下内容:
$(element).toggle(function(){
$(":checkbox").attr('disabled', true);
},
function(){
$(":checkbox").removeAttr('disabled');
})
答案 5 :(得分:8)
您可以通过执行以下操作恢复默认操作(如果是HREF跟随):
window.location = $(this).attr('href');
答案 6 :(得分:2)
答案 7 :(得分:2)
使用命名空间执行此操作的最佳方法。这是一种安全可靠的方式。这里.rb是命名空间,它确保unbind函数可以在特定的keydown上运行,但不能在其他keydown上运行。
$(document).bind('keydown.rb','Ctrl+r',function(e){
e.stopImmediatePropagation();
return false;
});
$(document).unbind('keydown.rb');
ref1:http://idodev.co.uk/2014/01/safely-binding-to-events-using-namespaces-in-jquery/
答案 8 :(得分:2)
如果是链接,则 $(this).unbind("click");
会重新启用链接点击,系统会恢复默认行为。
我创建了 a demo JS fiddle 来演示其工作原理:
以下是JS小提琴的代码:
HTML:
<script src="https://code.jquery.com/jquery-1.10.2.js"></script>
<a href="http://jquery.com">Default click action is prevented, only on the third click it would be enabled</a>
<div id="log"></div>
使用Javascript:
<script>
var counter = 1;
$(document).ready(function(){
$( "a" ).click(function( event ) {
event.preventDefault();
$( "<div>" )
.append( "default " + event.type + " prevented "+counter )
.appendTo( "#log" );
if(counter == 2)
{
$( "<div>" )
.append( "now enable click" )
.appendTo( "#log" );
$(this).unbind("click");//-----this code unbinds the e.preventDefault() and restores the link clicking behavior
}
else
{
$( "<div>" )
.append( "still disabled" )
.appendTo( "#log" );
}
counter++;
});
});
</script>
答案 9 :(得分:1)
如果元素只有一个处理程序,则只需使用jQuery unbind。
$("#element").unbind();
答案 10 :(得分:1)
禁用:
document.ontouchstart = function(e){ e.preventDefault(); }
启用:
document.ontouchstart = function(e){ return true; }
答案 11 :(得分:1)
事件接口的preventDefault()方法告诉用户代理,如果未明确处理事件,则不应像通常那样采取其默认操作。该事件将继续像往常一样传播,除非事件监听器之一调用stopPropagation()或stopImmediatePropagation(),它们中的任何一个都会立即终止传播。
在事件流的任何阶段调用preventDefault()都会取消事件,这意味着实现通常不会由于事件而执行任何默认操作。
您可以使用Event.cancelable检查事件是否可取消。对于不可取消的事件调用preventDefault()无效。
window.onKeydown = event => {
/*
if the control button is pressed, the event.ctrKey
will be the value [true]
*/
if (event.ctrKey && event.keyCode == 83) {
event.preventDefault();
// you function in here.
}
}
答案 12 :(得分:0)
我遇到了一个问题,即只有在某些自定义操作(在表单上启用了其他禁用的输入字段)结束后才需要默认操作。我将默认操作(submit())包装到一个自己的递归函数中(dosubmit())。
var prevdef=true;
var dosubmit=function(){
if(prevdef==true){
//here we can do something else first//
prevdef=false;
dosubmit();
}
else{
$(this).submit();//which was the default action
}
};
$('input#somebutton').click(function(){dosubmit()});
答案 13 :(得分:0)
您可以设置为2个类。将JS脚本设置为其中一个后,如果要禁用脚本,只需从此表单中删除带有绑定脚本的类。
HTML:
<form class="form-create-container form-create"> </form>
JS
$(document).on('submit', '.form-create', function(){
..... ..... .....
$('.form-create-container').removeClass('form-create').submit();
});
答案 14 :(得分:0)
使用布尔值:
let prevent_touch = true;
document.documentElement.addEventListener('touchmove', touchMove, false);
function touchMove(event) {
if (prevent_touch) event.preventDefault();
}
我在渐进式网络应用程序中使用它来防止滚动/缩放某些页面&#39;允许其他人。
答案 15 :(得分:-2)
这应该有效:
$('#myform').on('submit',function(e){
if($(".field").val()==''){
e.preventDefault();
}
});
答案 16 :(得分:-3)
let helperPath = (NSBundle.mainBundle().pathForResource("App Helper", ofType: "app"))!
let task = NSTask()
task.launchPath = "/usr/bin/open"
task.arguments = ["-a", helperPath, --args", "-admin_url", site.url, "-login", site.login, "-pass", site.password]
task.launch()
答案 17 :(得分:-10)
我不确定你是什么意思:但这是一个类似(可能是同样的)问题的解决方案......
我经常使用preventDefault()拦截项目。但是:它不是唯一的拦截方法......通常你可能只想要一个“问题”,然后继续像以前那样行为,或者停止。 在最近的一个案例中,我使用了以下解决方案:
$("#content").on('click', '#replace', (function(event){
return confirm('Are you sure you want to do that?')
}));
基本上,“防止默认”意味着拦截并做其他事情:“确认”旨在用于...确认!