jQuery点击除div和EVERYTHING INSIDE之外的任何东西

时间:2016-11-26 15:18:47

标签: javascript jquery html

我使用tis代码:

$(document).bind('click', function(e) {
  if(!$(e.target).is('#paybox')) {
    $('#paybox').hide();
  }
});
当用户点击#paybox以外的任何地方时,

隐藏#paybox

但是当我点击" radio"形式:

<div id="paybox">
    <table width="100%">
        <tr>
            <form method="post" action="">
                <td>
                    <input type="radio" name="dauer" value="small" checked>
                </td>

                <td>
                    <input type="radio" name="dauer" value="mid">
                </td>

                <td>
                    <input type="radio" name="dauer" value="big">
                </td>
            </form>
        </tr>
    </table>
</div>

#payboy内,然后隐藏#payboy

我该如何防止这种情况?

3 个答案:

答案 0 :(得分:3)

您应该检查您的点击是否在收款箱内。这样的事情应该有效:

$('body').on('click', function(e) {
  if($(e.target).closest('#paybox').length === 0) {
    $('#paybox').hide();
  }
});

所以这只会隐藏#paybox元素,如果点击既不在paybox上,也不在#paybox元素内的任何节点上。

答案 1 :(得分:1)

您可以使用closestparents进行检查,如下所示

$(document).bind('click', function(e) {
  if(!$(e.target).is('#paybox') && $(e.target).closest('#paybox').length === 0) {
    $('#paybox').hide();
  }
});
#paybox {
  background-color: gray;
  height: 100px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="paybox">
    <table width="100%">
        <tr>
            <form method="post" action="">
                <td>
                    <input type="radio" name="dauer" value="small" checked>
                </td>

                <td>
                    <input type="radio" name="dauer" value="mid">
                </td>

                <td>
                    <input type="radio" name="dauer" value="big">
                </td>
            </form>
        </tr>
    </table>
</div>

答案 2 :(得分:0)

你可以检查目标是否是div的孩子

// if target is not paybox and is not child of paybox
$(document).bind('click', function(e) {
  if(!$(e.target).is('#paybox') && !$(e.target).parents('#paybox').length) {
    $('#paybox').hide();
  }
});