Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/463.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 分区';谁在互相点击?_Javascript - Fatal编程技术网

Javascript 分区';谁在互相点击?

Javascript 分区';谁在互相点击?,javascript,Javascript,我有一个包含的div,它本身就像一个按钮 当点击时,我已经设置好展开并显示更多信息,同时在右上角显示一个关闭按钮 现在,当我单击close按钮时,close函数将执行,但div的onclick也将打开,因此最终结果是,嗯。。。什么都没发生 哈哈 提琴的例子也不起作用,我快疯了 您可以在显示后禁用DIVs click功能。当按下“关闭”按钮时,您可以重新启用该单击功能。已更新 你可以: 将页边距顶部放在#内部上,这样用户就不会同时单击两个页边距(或者从#外部的顶部边缘偏移某种距离)。(更新:已拒绝

我有一个包含的div,它本身就像一个按钮

当点击时,我已经设置好展开并显示更多信息,同时在右上角显示一个关闭按钮

现在,当我单击close按钮时,close函数将执行,但div的onclick也将打开,因此最终结果是,嗯。。。什么都没发生

哈哈

提琴的例子也不起作用,我快疯了


您可以在显示后禁用DIVs click功能。当按下“关闭”按钮时,您可以重新启用该单击功能。

已更新 你可以:

  • 页边距顶部
    放在
    #内部
    上,这样用户就不会同时单击两个页边距(或者从
    #外部
    的顶部边缘偏移某种距离)。(更新:已拒绝,CSS解决方案)

  • 或者,为每个
    div
    启动不同的函数,如
    innertobggle()
    outertogle()
    。这样你甚至可以从另一个呼叫一个。(更新:胡闹,导致解决方案2a。)

    2a。另一种方法是只为
    #outer
    触发事件?如果单击了
    #内部
    ,事件将弹出,并且
    #外部
    将触发一个切换,如图所示

  • 或者,根据需要禁用其中一个的单击事件。(更新:见@DanneMarne的解决方案。)

  • 或者,在每个对象上设置自定义属性,例如
    $('outer')。toggled=false
    ,它将记录每个对象的当前状态。(更新:没关系,没什么帮助)


  • 更新:所以,经过一点测试后,我选择2a。

    您可以从onclick返回false来关闭div。这将确保click事件不会传播

    另一种解决方案是对事件本身调用
    preventDefault()
    stopPropagation()
    。这也将确保活动不会继续进行

    编辑: 在所有发生的事件(onclick、onchange、onmouseover等)中,总是有一个事件变量,您可以忽略它,也可以从中提取信息。在您的示例中,我认为使用事件变量最简单的方法是执行以下操作:

    <div id="inner" onclick="toggle(false); event.preventDefault(); event.stopPropagation();">
    
    <div id="inner" onclick="toggle(event, false)">
    
    if(event.originalTarget.id == "inner"){
        // Inner was clicked
    }else if(event.originalTarget.id == "outer"){
        // Outer was clicked
    }
    
    使用事件变量可以做很多事情。例如,您可以像下面这样检查引发事件的节点,而不是将true或false传递给函数:

    <div id="inner" onclick="toggle(false); event.preventDefault(); event.stopPropagation();">
    
    <div id="inner" onclick="toggle(event, false)">
    
    if(event.originalTarget.id == "inner"){
        // Inner was clicked
    }else if(event.originalTarget.id == "outer"){
        // Outer was clicked
    }
    

    你看,我所做的是,当点击外部div时,我经历了切换过程,删除了外部div的onclick属性。。。所以只有一个事件是从内部分区发射的,是吗?(outer.removeAttribute('onclick')),我显然必须在单击内部div后再次添加该属性,但发生的情况是,一旦单击内部div,外部div就会返回其单击,这也会触发,并且我最终会在我开始的位置处结束。。。令人沮丧的…:-嗯。。。这听起来很有趣。。。我是JS新手,所以这两个是新的。。。你能解释一下(或给我指一个解释)你在这里的建议吗?那是描述性的。。。谢谢你,伙计…:-)首先,在我可能的行动过程中,用选择回答一个问题。。。至于我的问题,第一个选择是不可行的(css让我束手无策,我也不想再让她发胖了),我尝试了不同的功能,结果还是一样的。。。是否通过删除“onclick”属性来禁用单击?我还是JS新手,所以jQuery对我来说太难了…:-pI在您的示例中探讨了这些想法,有些好,有些坏。看起来您不需要为
    #内部
    再次单击
    ,因为关闭按钮位于
    #外部
    中。我还确认Javascript在JSFIDLE上的行为异常,这可能是一个我懒得修复的简单设置但是你看,假设有一个框,当你点击这个框时,它会展开并显示更多信息,并且在右上角显示一个小的关闭按钮。。。现在,单击此关闭按钮(无论出于何种原因,我选择使用Div,称之为挑战),也将触发父Div的onclick操作,因此不会关闭框…:-(如果我仅依赖父项的切换,则单击任意位置将导致框关闭。。。