2015-11-05 66 views
0

我正在使用Jquery Boostrap tab method。 是否可以防止点击方法以外的方法中的默认点击方法?触发e.preventDefault()外点击方法

我使用AnuglarJS,所以我希望这可以很容易地修复/黑客入侵,而无需重新设计AngularJS中的整个选项卡窗格。

我可以使用jQuery

改变标签
$('#tabId a[href="#s' + targetId + '"]').tab('show'); 

这样可以防止我的东西点击喜欢

$('#tabId a[href="#s' + targetId + '"]').preventDefault(); 

或者

$('#tabId a[href="#s' + targetId + '"]').addEventListener("click", function (e) { 
     e.preventDefault() 
    }); 
+0

您是否检查过插件提供的事件,以查看它们是否可以预防? – CBroe

+0

你似乎在将jQuery的'$'与vanilla-js'addEventListener'混合在一起。 – Oriol

+0

我知道:)这是为了说明的目的;) – stibay

回答

0

你不能阻止默认点击方法而不捕获点击事件。这不适合你吗?

$('#tabId a[href="#s' + targetId + '"]').click(function (e) { 
     e.preventDefault(); 
}); 
+0

这是不可取的,因为我对a元素有一个ng-click方法,并将变量从作用域发送到角度方法 – stibay

+0

由于jquery触发的点击事件不是由beeing触发的,所以完全不起作用。 – stibay

+0

恐怕我从未使用过Angular,所以我对它并不熟悉,也许Angular引入了一些不同的东西。但是,这只是将一个事件监听器添加到元素的方法。它并不关心事件是如何触发的。无论是用鼠标点击还是用jquery.trigger('click')或elem.click()都无关紧要。如果该元素的点击事件被触发,则该函数将运行并阻止默认操作。 –

1

ngClick指令暴露了$event变量。

在您的ng-click属性中,只需添加$event.preventDefault();即可。

例如,如果您有:

<a href="#" ng-click="doSomething();">Do something</a>

您只能将其更改为:

<a href="#" ng-click="doSomething(); $event.preventDefault();">Do something</a>

OR

您可以$event变量传递给你的方法。

<a href="#" ng-click="doSomething($event);">Do something</a>

然后在你的方法调用preventDefault()

$scope.doSomething = function($event) { 
    $event.preventDefault(); 
    //do something 
} 
0

以前对类似情况的回答似乎正确地处理了preventDefault,但与Gregg Duncan的回答类似。适度的区别在于绑定和解除绑定调用使用选定对象的本地上下文。

https://stackoverflow.com/a/5827040/2266428