JQUery Скрыть DIV, щелкнув за пределами DIV

Предположим, у меня есть следующий элемент управления:

   <div class="slControlWrapper">
        <div class="slControlLabel">
            <asp:Label ID="lblSL" CssClass="lblSL" runat="server">Clickable Label</asp:Label>
        </div>
        <div class="slControlSeparator">
            <img alt="" src="../Images/pxlGray.gif" style="width: 1px; height: 29px" />
        </div>
        <div class="slControlDropDown">
            <img alt="Clickable DropDown image" src="../Images/btDropDownCharcoal.gif" style="width: 23px; height: 29px" />
        </div>
         <div id="wndSL">
            This is the hidden content of my DIV Window
        </div>
    </div>

По умолчанию wndSL имеет style= " display:none; background-color: blue; height:500px; width:590px;"

Я могу показать wndSL, когда нажимаю slControlLabel или slControlDropDown. Однако мне также нужно скрыть его, когда я нажимаю либо на slControlLabel, либо на slControlDropDown, либо где-нибудь за пределами wndSL снаружи.

Может ли кто-нибудь помочь мне, как понять, как это скрыть, щелкнув где-нибудь за пределами моего wndSL.

Это то, что у меня есть до сих пор ... и мне нужно добавить часть, чтобы скрыть ее всякий раз, когда я щелкаю за пределами окна.

Спасибо

 $('.slControlLabel, .slControlDropDown').bind('click',function(event){
       alert('This will open the wndSL'); 
       $('#wndSL').show(); 
 });

Новая проблема, редакция 2

Вот DIV, который у меня есть сейчас, и, как вы увидите, у меня там больше элементов управления... поэтому исходный ответ больше не работает, потому что, когда я нажимаю элемент управления в DIV, он все равно закрывает DIV.... Поэтому, хотя мой первоначальный запрос состоял в том, чтобы закрыть, когда вы щелкаете за пределами DIV, когда я добавляю элементы управления в DIV, мое условие для скрытия не работает... Как я могу настроить его так, чтобы что-либо внутри DIV при нажатии не закрывалось окно (кроме кнопки закрытия icoRedX.gif в шапке)

это мой контроль

    <div class="wndShoppingList" id="wndShoppingList" style="display: block; ">
<div id="ctl00_ctl00_phContent_DynamicUserControl_Step_1_pnlWndShoppingListContentPanel" style="display: block; "><div id="ctl00_phContent_DynamicUserControl_Step_1_pnlWndShoppingListContent">
<div class="tableContainer">
        <div class="header">
            <div class="slHeaderLeft">
            Select a Saved Shopping List
            </div>
            <div class="slHeaderRight">
            <a id="ctl00_phContent_DynamicUserControl_Step_1_btClose" class="RadButton RadButton_Default rbImageButton" href="javascript:void(0)" style="display:inline-block;height:20px;width:18px;background-image:url(/APPSERVER0001/Images/icoDeleteGrayX.gif);line-height:20px;line-height:20px;height:20px;"><span class="rbText rbHideElement" style="width:100%;padding-left:0;padding-right:0;"></span><input id="ctl00_phContent_DynamicUserControl_Step_1_btClose_ClientState" name="ctl00_phContent_DynamicUserControl_Step_1_btClose_ClientState" type="hidden" autocomplete="off"></a>
            </div>
        </div>
        <div class="details">
            <div class="gridDescription">
            Select a saved Shopping List to open. The list you already have open will be automatically  saved
            </div>
            <div class="gridContainer">
                <div id="ctl00_ctl00_phContent_DynamicUserControl_Step_1_pnlTemplateShoppingListPanel">
                    <div id="ctl00_phContent_DynamicUserControl_Step_1_pnlTemplateShoppingList">
                        <div id="ctl00_phContent_DynamicUserControl_Step_1_grdTemplateShoppingList" class="RadGrid RadGrid_Default" style="height:300px;" tabindex="0">
                                <table cellspacing="0" class="rgMasterTable" id="ctl00_phContent_DynamicUserControl_Step_1_grdTemplateShoppingList_ctl00" style="width:100%;table-layout:auto;empty-cells:show;">
                                <colgroup>
                                <col>
                                <col>
                                <col>
                                <col>
                                </colgroup>
                                <thead>
                                <tr style="display:none;">
                                <th scope="col">&nbsp;</th><th scope="col">&nbsp;</th><th scope="col">&nbsp;</th><th scope="col">&nbsp;</th>
                                </tr>
                                </thead><tbody>
                                <tr class="rgRow" id="ctl00_phContent_DynamicUserControl_Step_1_grdTemplateShoppingList_ctl00__0">
                                <td><input type="image" name="ctl00$phContent$DynamicUserControl_Step_1$grdTemplateShoppingList$ctl00$ctl04$gbcSelectColumn" id="ctl00_phContent_DynamicUserControl_Step_1_grdTemplateShoppingList_ctl00_ctl04_gbcSelectColumn" src="../Images/btSelectCharcoal.gif" style="border-width:0px;"></td><td>
                                <span id="ctl00_phContent_DynamicUserControl_Step_1_grdTemplateShoppingList_ctl00_ctl04_lblTemplateName">Master Shopping List</span><br>
                                <span id="ctl00_phContent_DynamicUserControl_Step_1_grdTemplateShoppingList_ctl00_ctl04_lblLastUpdated"> Updated August 10, 2011</span>
                                </td><td>16 items</td><td><input type="image" name="ctl00$phContent$DynamicUserControl_Step_1$grdTemplateShoppingList$ctl00$ctl04$gbcDeleteColumn" id="ctl00_phContent_DynamicUserControl_Step_1_grdTemplateShoppingList_ctl00_ctl04_gbcDeleteColumn" src="../Images/icoDeleteRedX.gif" onclick="if(!confirm('Are you sure you want to delete this list ?'))return false;" style="border-width:0px;"></td>
                                </tr><tr class="rgAltRow" id="ctl00_phContent_DynamicUserControl_Step_1_grdTemplateShoppingList_ctl00__1">
                                <td><input type="image" name="ctl00$phContent$DynamicUserControl_Step_1$grdTemplateShoppingList$ctl00$ctl06$gbcSelectColumn" id="ctl00_phContent_DynamicUserControl_Step_1_grdTemplateShoppingList_ctl00_ctl06_gbcSelectColumn" src="../Images/btSelectCharcoal.gif" style="border-width:0px;"></td><td>
                                <span id="ctl00_phContent_DynamicUserControl_Step_1_grdTemplateShoppingList_ctl00_ctl06_lblTemplateName">Audrey's Birthday Party</span><br>
                                <span id="ctl00_phContent_DynamicUserControl_Step_1_grdTemplateShoppingList_ctl00_ctl06_lblLastUpdated">Shopped August 2, 2011 for $49.11</span>
                                </td><td>11 items</td><td><input type="image" name="ctl00$phContent$DynamicUserControl_Step_1$grdTemplateShoppingList$ctl00$ctl06$gbcDeleteColumn" id="ctl00_phContent_DynamicUserControl_Step_1_grdTemplateShoppingList_ctl00_ctl06_gbcDeleteColumn" src="../Images/icoDeleteRedX.gif" onclick="if(!confirm('Are you sure you want to delete this list ?'))return false;" style="border-width:0px;"></td>
                                </tr><tr class="rgRow" id="ctl00_phContent_DynamicUserControl_Step_1_grdTemplateShoppingList_ctl00__2">
                                <td><input type="image" name="ctl00$phContent$DynamicUserControl_Step_1$grdTemplateShoppingList$ctl00$ctl08$gbcSelectColumn" id="ctl00_phContent_DynamicUserControl_Step_1_grdTemplateShoppingList_ctl00_ctl08_gbcSelectColumn" src="../Images/btSelectCharcoal.gif" style="border-width:0px;"></td><td>
                                <span id="ctl00_phContent_DynamicUserControl_Step_1_grdTemplateShoppingList_ctl00_ctl08_lblTemplateName">Monthly Household Supplies</span><br>
                                <span id="ctl00_phContent_DynamicUserControl_Step_1_grdTemplateShoppingList_ctl00_ctl08_lblLastUpdated">Updated February 22, 2011</span>
                                </td><td>8 items</td><td><input type="image" name="ctl00$phContent$DynamicUserControl_Step_1$grdTemplateShoppingList$ctl00$ctl08$gbcDeleteColumn" id="ctl00_phContent_DynamicUserControl_Step_1_grdTemplateShoppingList_ctl00_ctl08_gbcDeleteColumn" src="../Images/icoDeleteRedX.gif" onclick="if(!confirm('Are you sure you want to delete this list ?'))return false;" style="border-width:0px;"></td>
                                </tr>
                                </tbody>        
                                </table>
                                <input id="ctl00_phContent_DynamicUserControl_Step_1_grdTemplateShoppingList_ClientState" name="ctl00_phContent_DynamicUserControl_Step_1_grdTemplateShoppingList_ClientState" type="hidden" autocomplete="off">
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>
</div>
</div>

это JS

function OnPageLoad(){
window.$ = $telerik.$;
var t;
$(document).ready(function () {
$('.slControlLabel, .slControlDropDown').bind('click',function(event){
    $('#wndShoppingList').show();  
    event.stopPropagation(); 
});

// OnClick Event outside the wndShoppinglist.
// $('html').click(function(event){  Tried  this as well 
if((event.target.id != 'wndShoppingList')){  // This used to work but after adding controls in the DIV, this returns the ID of the controls within the DIV
     alert('click on body '+ event.target.id)
     alert('about to hide')
     $('#wndShoppingList').hide(); 
});

});   //End $(document).ready()
}
Sys.Application.add_load(OnPageLoad);  

person Gotcha    schedule 17.11.2011    source источник


Ответы (3)


Привяжите событие клика к html, чтобы зафиксировать любой сделанный клик и скрыть #wndSL

$("html").click(function() {
    $("#wndSL").hide();
});

Затем переопределите это в событии клика вашего #wndSL, используя .stopPropagation();

$("#wndSL").click(function (event) {
  event.stopPropagation();
});
person Alex Peattie    schedule 17.11.2011
comment
Спасибо за ваш вклад ... вопрос, хотя ... есть ли какая-либо причина, по которой вы выбрали бы селектор html вместо тела ... просто интересно ... потому что я использовал тело ... думая, что это будет то же самое, что и html. .. так как я не могу физически щелкнуть в заголовке html - person Gotcha; 18.11.2011

Вам нужно использовать

event.stopPropagation();

HTML

<div class="slControlWrapper">
        <div class="slControlLabel">
            <asp:Label ID="lblSL" CssClass="lblSL" runat="server">Clickable Label</asp:Label>
        </div>
        <div class="slControlSeparator">
            <img alt="" src="../Images/pxlGray.gif" style="width: 1px; height: 29px" />
        </div>
        <div class="slControlDropDown">
            <img alt="Clickable DropDown image" src="../Images/btDropDownCharcoal.gif" style="width: 23px; height: 29px" />
        </div>
         <div id="wndSL">
            This is the hidden content of my DIV Window
        </div>
        <div id="test">
        I am for test click on me
        </div>
    </div>

CSS

#wndSL {

display:none;     background-color: blue;    height:500px;    width:590px;
}

Jquery

$('.slControlLabel, .slControlDropDown').bind('click',function(event){
       alert('This will open the wndSL');
       $('#wndSL').show();
     event.stopPropagation();
 });

$('html').click(function() {
   $('#wndSL').hide();
});

А вот Демонстрация

person Rupesh Pawar    schedule 17.11.2011
comment
мне нужна дополнительная помощь после того, как я применил модификации и актуальный контент - person Gotcha; 30.11.2011

person    schedule
comment
просто опечатка в сравнении != и отсутствует stopPropagation() в моей функции, чтобы показать... иначе он всплывет и сразу же закроет div. В противном случае я использовал его для скрытия... и добавил отсутствующий StopPropagation Спасибо... - person Gotcha; 18.11.2011