Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery中的事件冒泡-Event.stopPropogation不工作_Javascript_Jquery - Fatal编程技术网

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();
});