未触发jQuery preventDefault()
我有以下代码:未触发jQuery preventDefault(),jquery,event-handling,jquery-events,Jquery,Event Handling,Jquery Events,我有以下代码: $(document).ready(function(){ $("div.subtab_left li.notebook a").click(function(event) { event.preventDefault(); return false; }); }); 但是当我单击元素时。。它不会阻止默认操作。。为什么? 将代码修改为: $(document).ready(function(){ $("div.subtab_l
$(document).ready(function(){
$("div.subtab_left li.notebook a").click(function(event) {
event.preventDefault();
return false;
});
});
但是当我单击元素时。。它不会阻止默认操作。。为什么?
将代码修改为:
$(document).ready(function(){
$("div.subtab_left li.notebook a").click(function() {
e.preventDefault();
alert("asdasdad");
return false;
});
});
它停止默认操作,但不发出警报。。我在jQuery文档中找不到任何答案
完整代码如下所示:
$(document).ready(function(){
$('#tabs div.tab').hide();
$('#tabs div.tab:first').show();
$('#tabs ul li:first').addClass('active');
$('#tabs ul li a').click(function(){
$('#tabs ul li').removeClass('active');
$(this).parent().addClass('active');
var currentTab = $(this).attr('href');
$('#tabs div.tab').hide();
$(currentTab).show();
return false;
});
$("div.subtab_left li.notebook a").click(function(e) {
e.preventDefault();
e.stopPropagation();
e.stopImmediatePropagation();
alert("asdasdad");
return false;
});
});
HTML结构是:
<div id="tabs">
<ul id="nav">
<li><a id="tab1" href="#tab-1"></a></li>
<li><a id="tab2" href="#tab-2"></a></li>
<li><a id="tab3" href="#tab-3"></a></li>
<li><a id="tab4" href="#tab-4"></a></li>
</ul>
<div class="tab" id="tab-1">
<script type="text/javascript">$(document).ready(function(){$("ul.produse li").hover(function () {
$("ul.produse li").removeClass('active');$(this).addClass('active');}, function () {$(this).removeClass('active');});});
</script>
<div class="subtab_left">
<ul>
<li class="notebook"><a href="#">1</a></li>
<li class="netbook"><a href="#">2</a></li>
<li class="allinone"><a href="#">2</a></li>
<li class="desktop"><a href="#">2</a></li>
<li class="procesoare"><a href="#">2</a></li>
<li class="placi_video"><a href="#">2</a></li>
<li class="hdd_desktop"><a href="#">2</a></li>
<li class="tv_plasma"><a href="#">2</a></li>
<li class="tv_lcd"><a href="#">2</a></li>
<li class="telefoane_mobile last_item"><a href="#">2</a></li>
</ul>
</div>
$(document).ready(function(){(“ul.produse li”).hover(function(){
$($ul.produse li”).removeClass('active');$(this.addClass('active');},函数(){$(this.removeClass('active');});
试试这个:
$("div.subtab_left li.notebook a").click(function(e) {
e.preventDefault();
});
更新 这就是你的问题——你必须为一些
a
元素单击事件处理程序。在本例中,附加处理程序的顺序很重要,因为它们将按该顺序被激发
这是你想要的行为
这应该是您的代码:
$(document).ready(function(){
$('#tabs div.tab').hide();
$('#tabs div.tab:first').show();
$('#tabs ul li:first').addClass('active');
$("div.subtab_left li.notebook a").click(function(e) {
e.stopImmediatePropagation();
alert("asdasdad");
return false;
});
$('#tabs ul li a').click(function(){
alert("Handling link click");
$('#tabs ul li').removeClass('active');
$(this).parent().addClass('active');
var currentTab = $(this).attr('href');
$('#tabs div.tab').hide();
$(currentTab).show();
return false;
});
});
请注意,附加处理程序的顺序已交换,e.stopImmediatePropagation()
用于阻止另一个单击处理程序触发,而return false
用于停止跟踪链接的默认行为(以及停止事件冒泡。您可能会发现只需要使用e.stopPropagation
)
如果您删除e.stopImmediatePropagation()
,您会发现第二个单击处理程序的警报将在第一个警报后触发。删除return false
将不会影响此行为,但会导致浏览器跟随链接
注意
一个更好的解决办法可能是确保选择器返回完全不同的元素集合,这样就没有重叠,但这可能并不总是可能的,在这种情况下,上面描述的解决方案可能是一种考虑的方式。
return false
相当于调用event.preventDefault
和event.stopPropagation()
e
未定义。因此将在e.preventDefault()
处引发错误,并且下一行永远不会执行。
换句话说
$("div.subtab_left li.notebook a").click(function() {
e.preventDefault();
alert("asdasdad");
return false;
});
应该是
//note the e declared in the function parameters now
$("div.subtab_left li.notebook a").click(function(e) {
e.preventDefault();
alert("asdasdad");
return false;
});
$("div.subtab_left li.notebook a").click(function(e) {
e.preventDefault();
return false;
});
如果您已经使用submit操作进行了测试,那么您已经注意到它也不起作用 原因是表单已在
$(文档)中发布。读取(…
所以,您只需将其更改为$(document).load(…
现在,在你浏览者加载页面的那一刻,他将执行
我也有同样的问题,我一直在测试很多不同的东西,但它就是不起作用。 然后我再次查看jQuery.com上的教程示例,发现: jQuery脚本需要在所引用的元素之后 所以你的脚本需要在你想要访问的html代码之后 否则jQuery似乎无法访问它。如果
e.preventDefault();
不起作用,则必须使用e.stopImmediatePropagation();
有关更多信息,请参阅:
不,没有错误。第一个代码执行
alert()
但不会阻止默认操作。第二个代码执行alert()
但不会阻止默认操作。(唯一有效的是e.stopPropagation()+e.stopImmediatePropagation()
同时使用这两种方法…为什么?这些方法阻止了事件的冒泡-您必须为这个点击事件设置一些其他处理程序,这些处理程序也会被触发并执行一些您不期望的操作。您当前的JavaScript在隔离状态下看起来很好。您可以发布代码的其他相关部分吗?或者更好的是,制作一个演示代码不起作用的脚本。我有一些jQuery选项卡…在这些选项卡中,我有一些ul li a
来触发另一个事件..我将发布代码..我假设你是对的,因为这可能是唯一出错的事情-我在css中也有该元素的hover属性
是的,你一直都是对的..我有$(“#tabs ul li a')。单击(function(){
也适用于我的另一个
。因此我对它进行了如下修改$(“#tabs ul#nav li a”)。单击(function(){
现在它工作正常了…它是ul#nav
缺失的:)很好,你找到了一个比我在更新中建议的更好的修复方法-通过使用更具体的选择器,你完全可以避免问题!@pufos好吧,问题是,它确实有效。这意味着你的页面或JavaScript中一定有其他错误。如果你发布更多,也许有人可以解决问题。是的,非常感谢..代码有问题..在$('#tabs ul li a')行。单击(function(){
需要修改的是ul在我的代码中应用于多个
的ul#nav
。谢谢..大拇指起来了!从jQuery事件处理程序返回false
与调用“preventDefault()”和“stop>的效果完全相同
$("div.subtab_left li.notebook a").click(function(e) {
e.stopImmediatePropagation();
return false;
});