触发后evt.preventDefault()
,如何再次恢复默认操作?
触发后evt.preventDefault()
,如何再次恢复默认操作?
Answers:
根据@Prescott的评论,与之相反:
evt.preventDefault();
可能:
从本质上讲,它等同于“默认”,因为我们不再阻止它。
否则,我倾向于将您指向其他评论和答案提供的答案:
如何取消绑定调用event.preventDefault()的侦听器(使用jQuery)?
请注意,第二个示例已被redsquare提供的示例解决方案接受(如果未将其作为重复项关闭,请在此处发布直接解决方案):
$('form').submit( function(ev) {
ev.preventDefault();
//later you decide you want to submit
$(this).unbind('submit').submit()
});
要在继续执行click
jQuery中事件链接之前处理命令:
例如: <a href="http://google.com/" class="myevent">Click me</a>
防止并遵循jQuery:
$('a.myevent').click(function(event) {
event.preventDefault();
// Do my commands
if( myEventThingFirst() )
{
// then redirect to original location
window.location = this.href;
}
else
{
alert("Couldn't do my thing first");
}
});
或者只是window.location = this.href;
在preventDefault();
我必须延迟jQuery中的表单提交才能执行异步调用。这是简化的代码...
$("$theform").submit(function(e) {
e.preventDefault();
var $this = $(this);
$.ajax('/path/to/script.php',
{
type: "POST",
data: { value: $("#input_control").val() }
}).done(function(response) {
$this.unbind('submit').submit();
});
});
event.preventDefault(); //or event.returnValue = false;
及其相反(标准):
event.returnValue = true;
来源:https : //developer.mozilla.org/en-US/docs/Web/API/Event/returnValue
我建议以下模式:
document.getElementById("foo").onsubmit = function(e) {
if (document.getElementById("test").value == "test") {
return true;
} else {
e.preventDefault();
}
}
<form id="foo">
<input id="test"/>
<input type="submit"/>
</form>
...除非我想念什么。
没有相反的方法event.preventDefault()
可以理解为什么您event.preventDefault()
在调用它时必须首先研究其作用。
在幕后,preventDefault的功能实际上是调用return false,这将停止任何进一步的执行。如果您熟悉Javascript的旧方法,曾经有一种流行的方式是使用return false来取消使用return true的表单提交和按钮之类的事件(在jQuery出现之前)。
正如您可能已经根据上面的简单解释所得出的那样:的反面event.preventDefault()
是什么。您只是不阻止该事件,默认情况下,如果您不阻止该事件,浏览器将允许该事件。
请参阅以下说明:
;(function($, window, document, undefined)) {
$(function() {
// By default deny the submit
var allowSubmit = false;
$("#someform").on("submit", function(event) {
if (!allowSubmit) {
event.preventDefault();
// Your code logic in here (maybe form validation or something)
// Then you set allowSubmit to true so this code is bypassed
allowSubmit = true;
}
});
});
})(jQuery, window, document);
在上面的代码中,您会注意到我们正在检查allowSubmit是否为false。这意味着我们将阻止表单提交使用event.preventDefault
,然后执行一些验证逻辑,如果愿意,请将allowSubmit设置为true。
实际上,这是唯一与之相反的有效方法event.preventDefault()
–您也可以尝试删除事件,这些事件本质上可以实现相同的目的。
这里有用的东西...
首先,我们将单击链接,运行一些代码,然后我们将执行默认操作。使用event.currentTarget可以做到这一点。在这里,我们将尝试在新标签页上访问Google,但是在我们需要运行一些代码之前。
<a href="https://www.google.com.br" target="_blank" id="link">Google</a>
<script type="text/javascript">
$(document).ready(function() {
$("#link").click(function(e) {
// Prevent default action
e.preventDefault();
// Here you'll put your code, what you want to execute before default action
alert(123);
// Prevent infinite loop
$(this).unbind('click');
// Execute default action
e.currentTarget.click();
});
});
</script>
这里没有任何解决方案对我有帮助,我这样做是为了解决我的情况。
<a onclick="return clickEvent(event);" href="/contact-us">
和功能clickEvent()
,
function clickEvent(event) {
event.preventDefault();
// do your thing here
// remove the onclick event trigger and continue with the event
event.target.parentElement.onclick = null;
event.target.parentElement.click();
}
我认为“相反”是模拟事件。你可以用.createEvent()
遵循Mozilla的示例:
function simulateClick() {
var evt = document.createEvent("MouseEvents");
evt.initMouseEvent("click", true, true, window,
0, 0, 0, 0, 0, false, false, false, false, 0, null);
var cb = document.getElementById("checkbox");
var cancelled = !cb.dispatchEvent(evt);
if(cancelled) {
// A handler called preventDefault
alert("cancelled");
} else {
// None of the handlers called preventDefault
alert("not cancelled");
}
}
jQuery具有.trigger()
这样的功能,您可以触发元素上的事件-有时很有用。
$('#foo').bind('click', function() {
alert($(this).text());
});
$('#foo').trigger('click');
jQuery on()可能是对此的另一种解决方案。特别是在使用命名空间时。
jQuery on()只是绑定事件的当前方式(而不是bind())。off()是为了解除绑定。使用命名空间时,可以添加和删除多个不同的事件。
$( selector ).on("submit.my-namespace", function( event ) {
//prevent the event
event.preventDefault();
//cache the selector
var $this = $(this);
if ( my_condition_is_true ) {
//when 'my_condition_is_true' is met, the binding is removed and the event is triggered again.
$this.off("submit.my-namespace").trigger("submit");
}
});
现在,通过使用命名空间,您可以添加多个此类事件,并能够根据需要删除这些事件。.虽然提交不是最好的示例,但单击或按键等操作可能会派上用场。
这不是问题的直接答案,但可能会对某人有所帮助。我的观点是,仅根据某些条件调用preventDefault(),因为如果在所有情况下都调用preventDefault(),则没有事件的意义。因此,只有在满足条件时才具有if条件并调用preventDefault()才能在其他情况下以通常的方式起作用。
$('.btnEdit').click(function(e) {
var status = $(this).closest('tr').find('td').eq(3).html().trim();
var tripId = $(this).attr('tripId');
if (status == 'Completed') {
e.preventDefault();
alert("You can't edit completed reservations");
} else if (tripId != '') {
e.preventDefault();
alert("You can't edit a reservation which is already attached to a trip");
}
//else it will continue as usual
});
在我使用以下代码后,该代码为我重新实例化了该事件:
event.preventDefault(); to disable the event.
event.preventDefault = false;
我使用了以下代码。这对我来说可以。
$('a').bind('click', function(e) {
e.stopPropagation();
});
event.preventDefault()
;