我试图阻止我的表单提交验证失败.我试过按照上一篇文章,但我不适合我.我错过了什么?
<input id="saveButton" type="submit" value="Save" />
<input id="cancelButton" type="button" value="Cancel" />
<script src="../../Scripts/jquery-1.4.1-vsdoc.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function () {
$("form").submit(function (e) {
$.ajax({
url: '@Url.Action("HasJobInProgress", "ClientChoices")/',
data: { id: '@Model.ClientId' },
success: function (data) {
showMsg(data, e);
},
cache: false
});
});
});
$("#cancelButton").click(function () {
window.location = '@Url.Action("list", "default", new { clientId = Model.ClientId })';
});
$("[type=text]").focus(function () {
$(this).select();
});
function showMsg(hasCurrentJob, sender) {
if (hasCurrentJob == "True") {
alert("The current clients has a job in …Run Code Online (Sandbox Code Playgroud) 我想在Chrome中捕获Ctrl+ S,并阻止默认浏览器行为来保存页面.怎么样?
(只是发布问题和答案,因为我在这之后很长一段时间没找到解决方案)
我想阻止打开页面的链接.所以我写了这个:
$("a").click(function(e) {
e.preventDefault()
}
Run Code Online (Sandbox Code Playgroud)
太棒了!但这阻止了我的另一个事件:
$(".toolbar a").click(function(e) {
...action...
}
Run Code Online (Sandbox Code Playgroud)
当然,我可以通过一些测试将我的动作添加到第一个事件,但有一种优雅的方法可以防止只有 href事件执行吗?
编辑
事实上它很有效,对不起.看@ raina77ow小提琴在这里工作:http://jsfiddle.net/HeFS6/
以前我在我的代码中使用jQuery 1.7.1.我收到了上述错误.然后我直接从谷歌存储库使用jQuery 1.11.1
<script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.11.1.min.js">
</script>
Run Code Online (Sandbox Code Playgroud)
但我仍然得到这个错误.我该如何解决这个问题?
由于此错误,我的其他jQuery功能也无法正常工作.
我研究了很多关于解决方案但是每次我都得到相同的升级jQuery版本的解决方案.但这也不适合我.
我们正在尝试在我们的iOS网络应用上滚动元素,同时防止窗口本身滚动.我们正在touchmove窗口上捕获事件,以编程方式滚动元素并(尝试)通过调用preventDefault事件来阻止窗口本身滚动.
不幸的是,这在Mobile Safari中不起作用.窗口继续在我们的元素下滚动.问题听起来与https://bugs.webkit.org/show_bug.cgi?id=163207中描述的Webkit错误完全相同,但该问题在iOS 10.3中已得到修复,而我运行的是11.3.
捕获touchforcestart和调用preventDefault似乎确实阻止了窗口的滚动,但是我们正在调用它touchstart,因为窗口仍然滚动,这似乎"太晚了".滚动仅在下次touchstart调用时被阻止.
关于发生了什么的任何想法?我们感到困惑,因为这显然是一个错误,但它似乎已经修复了一段时间.
我正在计算文本字段中的单词,并在一定数量的单词后,我使用防止默认.在else中,我想重新设置默认命令.
preventDefault()是否具有相反的功能?
以下是一些示例代码:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>preventDefault</title>
<style type="text/css"></style>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script type="text/javascript">
$(function() {
var wordNum = 3;
var input_length;
$("#max").text("max word(s): " + wordNum);
$("#test").keypress(function(event) {
input_length = $.trim($(this).val())
.replace(/\s+/g, " ")
.split(' ').length;
if (input_length > (wordNum - 1)) {
event.preventDefault();
} else {
return true;
}
});
});
</script>
</head>
<body>
<div id="max"></div>
<textarea id="test" cols="20" rows="5"></textarea>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
它似乎适用于IE,但Firefox并不喜欢它.
我有这样的链接.
<a href="delete.php?id=1" class="delete">Delete</a>
Run Code Online (Sandbox Code Playgroud)
如果用户点击它.应该弹出确认,然后只有当用户单击是时,它才会转到实际的URL.
我知道这可以防止默认行为
function show_confirm()
{
var r=confirm("Are you sure you want to delete?");
if (r==true) { **//what to do here?!!** }
}
$('.delete').click(function(event) {
event.preventDefault();
show_confirm()
});
Run Code Online (Sandbox Code Playgroud)
但是如何确认后我如何继续链接或发送ajax帖子到该链接?
我想阻止focusOut(或blur)事件的默认事件,并将焦点设置为特定的输入字段.
这是我已经尝试过的:
使用event.preventDefault()之初,在函数结束时(用于测试目的,而不是风格)
return false; 防止传播
将焦点直接设置回元素中的元素(但我发现焦点仍然会切换,因为焦点开关在函数执行后.on()执行.我知道我可以使用setTimeout,但我想避免它并弄清楚心脏这个问题.)
使用blur而不是focusOut
我的代码是这样的:
_triggerEventHide: function(inst, eventType) {
inst.$target.on(eventType, function(event) {
event.preventDefault();
if (!$.suggestBox.$divCont.hasClass($.suggestBox.mouseOverClassName)) {
$.suggestBox.$divCont.css({display: 'none'}); //reposition Suggestbox
} else {
inst.target.focus();
}
event.preventDefault();
return false;
});
}
Run Code Online (Sandbox Code Playgroud)
注意,它$target表示jQuery包装的元素并target表示本机DOM元素.
我做了一些研究,已经发现了一些与我的问题相关的文章,但没有一个回答这个问题.
preventDefault对焦点事件不起作用 - 这里给出的答案是使用任何类型的事件操作的替代路径.
如果没有必要的值,将焦点反射回文本框 - 这里,解决方案是用来setTimeout()将焦点设置回原始元素,这是好的,但我想了解问题的核心,为什么preventDefault()是不在这里工作.
jQuery preventDefault()不起作用 - 我尝试了一些可能的解决方案来自这个线程,比如使用event.stopImmediatePropagation()和event.stop(),但一切都没有用.
我感谢任何时候,知识和解决方案(包括尝试)在这件事上的贡献.我真的想学习......
这是一个jsFiddle,向您展示问题...随意玩它并尝试不同的解决方案.
有人可以解释event.preventDefault()和之间的区别是event.stopPropagation()什么?
我有一张桌子,在那张桌子里我有一个img标签.
当我点击img标签时,我想看一个弹出窗口.
但我也想停止选择多行,所以我使用:
$("table.items tbody tr").click(function(event) {
event.stopPropagation();
});
Run Code Online (Sandbox Code Playgroud)
当我使用js代码时,弹出窗口不会出现;
如果我删除了js代码,弹出窗口就可以了.
$(".info").live("click",function(e){
//console.log('ok');
e.stopPropagation();
var elem = $(this);
var id = $(this).attr("id").replace("image_","container_");
$('#'+id).toggle(100, function() {
if($(this).css('display') == 'block') {
$.ajax({
url: "$url",
data: { document_id:elem.attr('document_id') },
success: function (data) {
$('#'+id).html(data);
}
});
}
});
});
Run Code Online (Sandbox Code Playgroud)
为什么?
对于特定的情况和元素,我需要默认显示Bootstrap Tooltip(一旦加载页面),始终保持打开(即使在鼠标悬停和鼠标移除时).
这是我用来在元素上默认打开工具提示的代码:
$('#myelement').tooltip('show');
Run Code Online (Sandbox Code Playgroud)
现在我不确定如何在mouseover和mouseout上阻止/禁用工具提示的默认操作.任何的想法?
提前致谢!
preventdefault ×10
jquery ×9
javascript ×3
click ×1
confirmation ×1
deprecated ×1
events ×1
firefox ×1
function ×1
ios ×1
migration ×1
popup ×1
scroll ×1
tooltip ×1
touchmove ×1
validation ×1