js冒泡事件的特例toggle无法实现阻止冒泡——slideDown()和slideUp()

一、问题

  题目及答案展示:要求,点击题目,展开答案。如下:

  展开前

  

  展开后

  

最开始使用的toggle方法来实现

$(".content_problem").toggle(
            function(){
                $(this).find(".answer").slideDown();
            },
            function(){
                $(this).find(".answer").slideUp();
            }
);

这个很容易实现效果,但是导致“删除”按钮无法点击,因为冒泡事件。

我尝试了使用event.stopPropagation();来组织冒泡,但是没有达到效果。

二、解决

通过判断元素属性是否是hidden来使用slideDown()和slideUp()

$(document).on("click",".content_problem",function(){
            var $answer = $(this).find(".answer");
            if ($answer.is(":hidden")) {
                $answer.stop(true,true).slideDown();
            } else {
                $answer.stop(true,true).slideUp();
            }
});

这样实现delete方法时就不用考虑冒泡事件了。

function deleteQuestion(){
        $(".delete").live("click",function(){
            var questionId = $(this).parents(".content_problem").find(".questionid").val();
            var area = $("this").parents(".content_problem");
            $.ajax({
                url : "${ctx}/exercise/deleteWrongQuestion",
                type : "POST",
                dataType : "html",
                data : {
                    "questionId" : questionId,
                },
                success : function(data) {
                    if(data!=0){//返回非0值证明执行成功,需将总题目数量减一,并将该题从页面上移除
                        var total = parseInt($(".conTitle").html())-1;
                        $("#pageCount").val(total);
                        $(".conTitle").html(total);
                        $(".page").trigger(‘reloadPage‘,Math.ceil(total/5));//重新分页
                    }else{
                        Tosn.info({
                             title : "提示",
                             cont : "网络异常,请稍后再试"
                        });
                    }
                }
            });
            return false;
        });
    }
时间: 2024-08-18 07:43:01

js冒泡事件的特例toggle无法实现阻止冒泡——slideDown()和slideUp()的相关文章

js 停止事件冒泡 阻止浏览器的默认行为(阻止超连接 # )

在前端开发工作中,由于浏览器兼容性等问题,我们会经常用到“停止事件冒泡”和“阻止浏览器默认行为”. 1..停止事件冒泡 JavaScript代码 //如果提供了事件对象,则这是一个非IE浏览器if ( e && e.stopPropagation )//因此它支持W3C的stopPropagation()方法e.stopPropagation(); else//否则,我们需要使用IE的方式来取消事件冒泡 window.event.cancelBubble = true;return fal

Js冒泡事件和捕获事件

js中冒泡事件和捕获事件: 冒泡事件:冒泡事件是从里向外,即是从被绑定元素开始一直向外到达页面的所有祖先元素都会被触发,这 一过程被称为事件冒泡.这个事件从原始元素开始一直冒泡到DOM树的最上层 捕获事件:捕获事件是从页面的最上层到被绑定元素都会触发. IE只支持事件冒泡,不支持事件捕获 冒泡事件和捕获事件的方向是相反的. 形式如下图所示: 一般为浏览器中的元素绑定事件有2种方式: 一.直接在页面元素中进行绑定,此方式采用的是冒泡排序,如: <div id="eventExample&qu

js中冒泡事件和捕获事件

js中冒泡事件和捕获事件: 冒泡事件:冒泡事件是从里向外,即是从被绑定元素开始一直向外到达页面的所有祖先元素都会被触发,这 一过程被称为事件冒泡.这个事件从原始元素开始一直冒泡到DOM树的最上层 捕获事件:捕获事件是从页面的最上层到被绑定元素都会触发. IE只支持事件冒泡,不支持事件捕获 冒泡事件和捕获事件的方向是相反的. 形式如下图所示: 一般为浏览器中的元素绑定事件有2种方式: 一.直接在页面元素中进行绑定,此方式采用的是冒泡排序,如: <div id="eventExample&qu

JS:event对象下的target属性和取消冒泡事件

1.target 通过获取DOM元素 var box = document.getElementById("box"); document.box.onclick = function(){  alert(123);//123 } event对象下的target方法 :获取事件的目标,不用document.getElementById("box")即可获取目标; //W3C下 document.onclick = function(evt){ var e = evt

js的事件冒泡和点击其他区域隐藏弹出层

一.前言 在编写页面的时候,我们经常使用到弹出层.对于弹出层,原本的意义就是增加与用户的交互,提升用户的好感度.如果弹出层都没有较好的体验,那何谈通过交互来提升好感... 首先提出几个弹出层的注意点: 弹出层的界面需要统一,不一致的弹出层并不能增加美感,相反还会显得页面布局更加杂乱无章: 弹出层的设计一定要好看,按钮要符合项目的主色调: 弹出层的宽度固定屏幕占比,设置max-width,高度根据内容自适应: 点击其他区域隐藏弹出层... 二.正文 今天,主要说说点击其他区域隐藏弹出层.笔者被这个

DOM2级事件对象、添加事件、阻止默认事件、阻止冒泡事件、获取事件对象目标的兼容处理

事件对象——兼容处理 1 /* 2 * 功能: 事件对象兼容 3 * 参数: 表示常规浏览器的事件对象e 4 */ 5 function getEvent(e) { 6 7 // 如果存在e存在,直接返回,否则返回window.event 8 return e || window.event; 9 } 获取事件所对应的目标——兼容处理 1 /* 2 3 * 功能: 获取事件所对应的目标 4 5 * 参数: 表示常规浏览器的事件对象e 6 7 */ 8 9 function getTargetBy

jquery的冒泡事件event.stopPropagation()

js中的冒泡事件与事件监听 冒泡事件 js中“冒泡事件”并不是能实际使用的花哨技巧,它是一种对js事件执行顺序的机制,“冒泡算法”在编程里是一个经典问题,冒泡算法里面的冒泡应该 说是交换更加准确:js里面的“冒泡事件”才是真正意义上的“冒泡”,它从DOM最低层逐层遍历树,然后附加相应事件.以下面代码为例: <title>冒泡事件</title><script type="text/javascript">function Add(sText){   

阻止默认事件和阻止冒泡的应用场景

阻止默认事件,比如这个: <a href="https://www.baidu.com"> <div> <span>取消</span> </div> </a> 比如这样的一个需求 点击取消按钮的时候会触发一些js动作,但是不能让这个div产生跳转行为,所以需要在点击取消的时候 阻止冒泡,防止其跳转. 阻止冒泡,比如最简单的弹出层,当点击确认提交按钮的时候实际上点击事件是会往上冒泡,而一般我们取消遮罩的时候,都是通过

JQuery阻止冒泡事件on绑定中异常情况分析

科普下事件冒泡以及默认行为,以下面例子举列子: 事件冒泡:当点击内部button元素时,会触发自身及外层 a的点击事件,这就是事件冒泡引起的.事件会随着 DOM 的层次结构依次向上传播. 事件冒泡可能会引起意料之外的效果,有时候需要阻止事件的冒泡行为. 默认行为:例子中a的href跳转链接就是所谓的默认行为,或者是表单form的提交. JQuery中阻止冒泡常用到的有以下3个方法: 1:event.stopPropagation();  只阻止了冒泡事件, 默认行为没有阻止 2:event.pr