Javascript jQuery中的事件冒泡-Event.stopPropogation不工作
我试图防止点击表单冒泡到父级Javascript jQuery中的事件冒泡-Event.stopPropogation不工作,javascript,jquery,Javascript,Jquery,我试图防止点击表单冒泡到父级”; 变量$title=$(“”+结果['title']+“”); var$snippet=$(“”+结果['htmlSnippet']+“”; //为了简洁起见,省略了一些代码 变量$ExpandBookButton=$(“扩展”); $expandBooksbutton.on('click',函数(事件){ event.stopPropagation(); var height=$(“#图书容器”).height(); 如果(高度!=200){ 元("书柜").高
”;
变量$title=$(“”+结果['title']+“”);
var$snippet=$(“”+结果['htmlSnippet']+“
”;
//为了简洁起见,省略了一些代码
变量$ExpandBookButton=$(“扩展”);
$expandBooksbutton.on('click',函数(事件){
event.stopPropagation();
var height=$(“#图书容器”).height();
如果(高度!=200){
元("书柜").高度(200);;
}
否则{
元("书柜").高度(100);;
}
});
我将整个内容包装在锚定标记
中,因为我正在制作搜索结果项
无论是否添加
event.stopPropogation();
都会触发
上的单击事件。防止冒泡和取消默认浏览器行为之间存在差异。请尝试添加
return false;
在处理函数的末尾,如下所示
$expandBooksbutton.on('click', function(event){
var height = $('#book-container').height();
if(height != 200){
$('#book-container').height(200);
}
else{
$('#book-container').height(100);
}
return false;
});
如果我正确理解了这个问题,这应该是解决办法
更新
对不起,我应该提到还有一个替代方案(实际上我应该主要作为建议提供),这是:
event.preventDefault();
此函数实际上阻止默认行为,而
返回false
两者都做(停止冒泡并防止默认行为)
这里有更多信息:
在不了解完整DOM结构的情况下,这将有点抽象。但是,在元素添加到DOM之前绑定到元素的事件处理程序实际上不会触发 从: 事件处理程序仅绑定到当前选定的元素;它们 必须在代码调用.on()时存在于页面上。
要确保元素存在并且可以选择,请执行事件 在文档就绪处理程序中为 页面上的HTML标记。如果将新HTML注入页面…请在将新HTML放入页面后附加事件处理程序。或者,使用委派事件 所以基本上你有两个选择: 为委托事件创建一个处理程序,并在将父元素添加到DOM后将其绑定到父元素。请注意,这种方法要求父元素也嵌套在
中
$(parent-elem).on('click', '#btn-showMoreBooks', function(e) {
// your handler logic
});
当然,您可以始终保持逻辑不变,但只有在将处理程序添加到DOM中后才能将其绑定到元素。这是合理的,只要在初始页面加载后不会多次动态重新创建该元素。您可以尝试此方法
$(<a tag selector>).on('click',function(e){
e.preventDefault();
});
$()。在('click',函数(e)上{
e、 预防默认值();
});
您可以共享生成的htmlwhere appending的示例吗$expandBooksbutton
。显示呈现的HTMLvar$divMoreBooks=$(“”);$divMoreBooks.append($expandBooksbutton);var$listdivs=$(“”);$listdivs.append($divMoreBooks);$listdivs.append($bookslist);$result.append($listdivs);为什么要将所有内容包装在锚中?
$(<a tag selector>).on('click',function(e){
e.preventDefault();
});