我有一个下拉菜单,即使我正在调用e.preventDefault(),它仍然会触发href更改。这就是我配置jquery地址更改的方式:
$(document).ready(function() {
// Setup jQuery address on some elements
$('a').address();
// Run some code on initial load
$.address.init(function(e) {
// Address details can be found in the event object
});
// Handle handle change events
$.address.change(function(e) {
var urlAux = e.value.split('=');
var page = urlAux[0];
var arg = urlAux[1];
....
});
});
我的下拉ID看起来像这样:
<li id="search"><a href="#" class="drop" >Search</a>
下拉列表的事件处理程序如下:
$('#search').click(function(e) {
e.preventDefault();
$(this).children(menuItemChildren).slideDown(0);
$(this).hover(function() {
}, function(){
$(this).children(menuItemChildren).slideUp(0);
});
});
即使我在我的#search元素上调用e.preventDefault(),它仍会触发地址更改。任何想法都错了吗?
答案 0 :(得分:2)
答案 1 :(得分:0)
这应该有效
<li id="search"><a href="javascript:void(0)" class="drop" >Search</a>
答案 2 :(得分:0)
您应该在a
元素上添加一个点击处理程序,并调用e.preventDefault()
$('#search a.drop').click(function(e) {
e.preventDefault();
});
答案 3 :(得分:0)
从孩子到父母,事件泡沫向上。您试图通过调用父<a>
上的e.preventDefault();
来阻止<li>
上的默认操作。问题是,与<a>
相关的所有操作都将在连接到<li>
的操作之前触发,因为我在第一句中描述了事件冒泡顺序。换句话说,直到孩子已经触发事件之后才会调用e.preventDefault();
。
您应该将click
个事件绑定到<a>
元素,然后从那里调用e.preventDefault();
。
答案 4 :(得分:0)
问题很可能是MouseEvent e没有引用a标记,因为您将click事件绑定到list元素。您可以使用console.log(e.target)进行检查。您可能会看到e.target是一个列表元素。您可以通过将另一个事件绑定到
来解决此问题$('#search a').click(function (e) {
e.preventDefault();
});
但是为什么只要删除href属性就可以使用e.preventDefault()?这样做,点击后就不会采取任何行动。