පරිශීලකයා පිටත ක්ලික් කළ විට DIV සැඟවීමට jQuery භාවිතා කරන්න


979

මම මෙම කේතය භාවිතා කරමි:

$('body').click(function() {
   $('.form_wrapper').hide();
});

$('.form_wrapper').click(function(event){
   event.stopPropagation();
});

මේ HTML :

<div class="form_wrapper">
   <a class="agree" href="javascript:;">I Agree</a>
   <a class="disagree" href="javascript:;">Disagree</a>
</div>

ගැටළුව වන්නේ මා තුළ සබැඳි ඇති අතර divඒවා ක්ලික් කළ විට ඒවා තවදුරටත් ක්‍රියාත්මක නොවේ.


6
සරල ජාවාස්ක්‍රිප්ට් භාවිතයෙන් ඔබට මේ වගේ දෙයක් උත්සාහ කළ හැකිය: jsfiddle.net/aamir/y7mEY
අමීර් අෆ්රිඩි

භාවිතා කිරීම $('html')හෝ $(document)වඩා හොඳ වනු ඇත$('body')
ඒඩ්‍රියන් බී

Answers:


2509

එකම ගැටලුවක් තිබුනේ නම්, මෙම පහසු විසඳුම ඉදිරිපත් කරන්න. එය පවා පුනරාවර්තන ලෙස ක්‍රියා කරයි:

$(document).mouseup(function(e) 
{
    var container = $("YOUR CONTAINER SELECTOR");

    // if the target of the click isn't the container nor a descendant of the container
    if (!container.is(e.target) && container.has(e.target).length === 0) 
    {
        container.hide();
    }
});

19
එය මගේ ව්‍යාපෘතියට ඇතුළත් කරන්න, නමුත් සුළු වෙනස් කිරීමකින්, මූලද්‍රව්‍ය සමූහයක් භාවිතා කරමින් ඒවා එකවරම ලූප් කරන්න. jsfiddle.net/LCB5W
තෝමස්

5
@mpelzsherman බොහෝ අය අදහස් දැක්වූයේ ස්නිපටය ස්පර්ශ උපාංගවල ක්‍රියා කරන නමුත් ලිපිය සංස්කරණය කර ඇති බැවින් මෙම අදහස් තරමක් අතුරුදහන් වී ඇති බවයි. TBH මම නිශ්චිත හේතුවක් සඳහා "මූසිකය" භාවිතා කළේ දැයි මම නොදනිමි, නමුත් එය "ක්ලික්" සමඟ ක්‍රියා කරන්නේ නම් ඔබ "ක්ලික්" භාවිතා නොකිරීමට කිසිදු හේතුවක් මට නොපෙනේ.

6
මෙම සිදුවීම සමඟ කන්ටේනරය එක් වරක් සඟවා තැබීමට මට අවශ්‍ය විය, භාවිතා කරන විට මෙම ඇමතුම විනාශ විය යුතුය. එය සිදු කිරීම සඳහා, මම බින්ඩ් ("click.namespace") සමඟ ක්ලික් ඉසව්වෙහි නාම අවකාශය භාවිතා කළ අතර, සිදුවීම සිදු වූ විට, මම නොබැඳීම ("click.namespace") අමතන්නෙමි. අවසාන වශයෙන්, මම container (e.target) .cloest (". බහාලුම්") භාවිතා කළෙමි. බහාලුම් හඳුනා ගැනීම සඳහා දිග ... එබැවින්, මම මෙම පිළිතුරෙන් කිසිදු උපක්‍රමයක් භාවිතා
නොකළෙමි

80
$("YOUR CONTAINER SELECTOR").unbind( 'click', clickDocument );පසෙකින් භාවිතා කිරීමට මතක තබා ගැනීම .hide(). එබැවින් documentක්ලික් කිරීම් වලට දිගටම සවන් නොදෙන්න.
බ්‍රසෝෆිලෝ

14
හොඳම භාවිතයන් සඳහා මම $(document).on("mouseup.hideDocClick", function () { ... });කන්ටේනරය විවෘත කරන $(document).off('.hideDocClick');ශ්‍රිතයේ සහ සැඟවුණු ශ්‍රිතයේ ලියා ඇත. නාම අවකාශ භාවිතා කරමින් මම mouseupලේඛනයට අමුණා ඇති වෙනත් සවන්දෙන්නන් ඉවත් නොකරමි .
campsjos

205

ඔබ මේ වගේ දෙයක් සමඟ යෑම හොඳය:

var mouse_is_inside = false;

$(document).ready(function()
{
    $('.form_content').hover(function(){ 
        mouse_is_inside=true; 
    }, function(){ 
        mouse_is_inside=false; 
    });

    $("body").mouseup(function(){ 
        if(! mouse_is_inside) $('.form_wrapper').hide();
    });
});

කොතරම් දක්ෂද! මෙම තාක්ෂණය සම්මතද?
advait

එය කලින් භාවිතා කළ බවක් මා දුටුවේ නැත. මේ සියල්ලම hoverසිදුවීම් හසුරුවන්නා පිළිබඳ වන අතර එය බොහෝ හැකියාවන් විවර කරයි.
මක්‍රම් සාලේ

5
කවුළු-වස්තුව (= ගෝලීය විචල්‍යයන් භාවිතා කිරීම) ජනගහනය කිරීම සුදුසු යැයි සිතීමට මිනිසුන්ට ඉඩ දෙන බැවින් මෙය හොඳ විසඳුමක් ලෙස මම නොසිතමි.

1
@ Prc322 කියූ දෙයට යමක් එකතු කිරීම සඳහා, ඔබට ඔබේ කේතය නිර්නාමික ශ්‍රිතයක් සමඟ ඔතා එය වහාම අමතන්න. (function() { // ... code })(); මෙම රටාවේ නම මට මතක නැත, නමුත් එය ඉතා ප්‍රයෝජනවත් වේ! ඔබගේ ප්‍රකාශිත විචල්‍යයන් සියල්ලම ශ්‍රිතය තුළ රැඳී ඇති අතර ගෝලීය නාම අවකාශය දූෂණය නොකරයි.
pedromanoel

3
c prc322 විචල්‍යයක විෂය පථය වෙනස් කරන්නේ කෙසේදැයි ඔබ නොදන්නේ නම්, ඔබ හරි, මෙම විසඳුම ඔබට හොඳ නැත ... එසේම ජාවාස්ක්‍රිප්ට් ද නොවේ. ඔබ හුදෙක් ස්ටැක් පිටාර ගැලීමෙන් කේත පිටපත් කර අලවන්නේ නම්, කවුළු වස්තුවෙහි යමක් නැවත ලිවීමට වඩා ඔබට බොහෝ ගැටලු ඇති වේ.
ගේවින්

89

මෙම කේතය මඟින් පිටුවේ ඇති ඕනෑම ක්ලික් සිදුවීමක් අනාවරණය කර ගන්නා #CONTAINERඅතර මූලද්‍රව්‍යය ක්ලික් කරන්නේ #CONTAINERමූලද්‍රව්‍යය හෝ එහි පැවත එන්නන් නොවේ නම් පමණි.

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

මෙය පරිපූර්ණයි !!
මොහොමඩ් අබ්දුල් මුජිබ්

K 9KSoft ඔබට උදව් කිරීමට හැකිවීම ගැන මම සතුටු වෙමි. ඔබගේ ප්‍රතිපෝෂණයට ස්තූතියි සහ සුභ පැතුම්.
නඩුව

මෙම විසඳුම ඩිවයින් බහාලුමක් ලෙස භාවිතා කිරීම සඳහා මට හොඳින් ක්‍රියාත්මක විය!
JCO9

විශිෂ්ට විසඳුමක්. ගොඩක් ස්තුතියි !
Sjd

76

StopPropagation මත විශ්වාසය තැබීම වෙනුවට ශරීරය සඳහා වෙඩි තබන ක්ලික් සිද්ධියේ ඉලක්කය පරීක්ෂා කිරීමට ඔබට අවශ්‍ය විය හැකිය.

වැනි දෙයක්:

$("body").click
(
  function(e)
  {
    if(e.target.className !== "form_wrapper")
    {
      $(".form_wrapper").hide();
    }
  }
);

එසේම, ශරීර අංගයට බ්‍රව්සරයේ පෙන්වා ඇති සම්පූර්ණ දෘශ්‍ය අවකාශය ඇතුළත් නොවිය හැකිය. ඔබගේ ක්ලික් කිරීම් ලියාපදිංචි නොවන බව ඔබ දුටුවහොත්, ඒ වෙනුවට HTML මූලද්‍රව්‍යය සඳහා ක්ලික් හෑන්ඩ්ලර් එක් කිරීමට ඔබට අවශ්‍ය විය හැකිය.


ඔව්, දැන් සබැඳි ක්‍රියා කරයි! නමුත් කිසියම් හේතුවක් නිසා, මම සබැඳිය ක්ලික් කළ විට, එය දෙවරක් වෙඩි තබයි.
ස්කොට් යූ -

මම මෙහි විචලනය භාවිතා කළෙමි. මම මුලින්ම පරීක්ෂා කරන්නේ මූලද්‍රව්‍යය දෘශ්‍යමානද යන්න සහ ඉලක්කය.
Hawkee

e.stopPropagation();ඔබට වෙනත් ක්ලික් සවන්දෙන්නෙකු සිටී නම් අමතක නොකරන්න
ඩැරින් කොලෙව්

3
-1. form_wrapperඔබ අපේක්ෂිත හැසිරීම නොවන එහි දරුවෙකු ක්ලික් කළ විට මෙය සැඟවෙයි . ඒ වෙනුවට prc322 හි පිළිතුර භාවිතා කරන්න.
මාර්ක් අමරි

39

සජීවී ඩෙමෝ

චෙක් ක්ලික් ප්‍රදේශය ඉලක්කගත අංගයේ හෝ එහි දරුවා තුළ නොමැත

$(document).click(function (e) {
    if ($(e.target).parents(".dropdown").length === 0) {
        $(".dropdown").hide();
    }
});

යාවත්කාලීන කිරීම:

jQuery නැවතුම් ප්‍රචාරණය හොඳම විසඳුමයි

සජීවී ඩෙමෝ

$(".button").click(function(e){
    $(".dropdown").show();
     e.stopPropagation();
});

$(".dropdown").click(function(e){
    e.stopPropagation();
});

$(document).click(function(){
    $(".dropdown").hide();
});

යාවත්කාලීන කිරීමට ස්තූතියි, පරිපූර්ණයි! ස්පර්ශ උපාංගවල එය ක්‍රියාත්මක වේද?
FFish

1
නඩුවේදී, ඔබට පිටුවක බහුවිධ අඩුවීම් තිබේ. මම හිතන්නේ ඔබ එය විවෘත කිරීමට පෙර සියලු පතන වසා දැමිය යුතුයි clicked. එසේ නොවුවහොත්, stopPropagationඑකවර බහුවිධ බිඳවැටීම් විවෘතව පවතී.
T04435

බොහෝම ස්තූතියි, මගේ නඩුවේ ප්‍රචාරණය එකම ක්‍රියාකාරී විසඳුමයි
රයන් එන්එස්

19
$(document).click(function(event) {
    if ( !$(event.target).hasClass('form_wrapper')) {
         $(".form_wrapper").hide();
    }
});

2
හ්ම් ... මම ඩිවයිසයට ඇතුලත යමක් ක්ලික් කළහොත්, කිසියම් හේතුවක් නිසා මුළු ඩිවි එක අතුරුදහන් වේ.
ස්කොට් යූ -

11
ඉලක්කයට පන්තිය තිබේදැයි පරීක්ෂා කිරීම වෙනුවට උත්සාහ කරන්න: if (event (event.target) .closest ('. Form_wrapper) .get (0) == null) {$ (". Form_wrapper"). සඟවන්න (); } මෙමඟින් ඩිවි එක ඇතුළේ ඇති දේවල් ක්ලික් කිරීමෙන් ඩිවි සැඟවිය නොහැකි බව සහතික වේ.
ජෝන් හේගර්

17

විසඳුම යාවත්කාලීන කළේ:

  • ඒ වෙනුවට mouseenter සහ mouseleave භාවිතා කරන්න
  • හෝවර් භාවිතා කිරීම සජීවී සිදුවීම් බන්ධනය

var mouseOverActiveElement = false;

$('.active').live('mouseenter', function(){
    mouseOverActiveElement = true; 
}).live('mouseleave', function(){ 
    mouseOverActiveElement = false; 
});
$("html").click(function(){ 
    if (!mouseOverActiveElement) {
        console.log('clicked outside active element');
    }
});

1
.liveදැන් අතහැර දමා ඇත ; .onඒ වෙනුවට භාවිතා කරන්න.
බ්‍රෙට්

15

වඩාත්ම ජනප්‍රිය පිළිතුර සඳහා jQuery නොමැතිව විසඳුමක් :

document.addEventListener('mouseup', function (e) {
    var container = document.getElementById('your container ID');

    if (!container.contains(e.target)) {
        container.style.display = 'none';
    }
}.bind(this));

MDN: https://developer.mozilla.org/en/docs/Web/API/Node/contains


bindවැඩ කරන්නේ නැහැ. ශ්‍රිතය ක්‍රියාත්මක කිරීම සඳහා ඔබට එය නිවැරදි කළ හැකිද?
මෙම්මෝ

9

ESCක්‍රියාකාරීත්වය සමඟ සජීවී නිරූපණය

ඩෙස්ක්ටොප් සහ ජංගම යන දෙඅංශයෙන්ම ක්‍රියා කරයි

var notH = 1,
    $pop = $('.form_wrapper').hover(function(){ notH^=1; });

$(document).on('mousedown keydown', function( e ){
  if(notH||e.which==27) $pop.hide();
});

යම් අවස්ථාවක දී ඔබ ලේඛනය මත ක්ලික් කරන විට ඔබේ මූලද්‍රව්‍යය සැබවින්ම දෘශ්‍යමාන වන බවට ඔබ සහතික විය යුතුය: if($pop.is(':visible') && (notH||e.which==27)) $pop.hide();


8

මේ වගේ දෙයක් වැඩ කරන්නේ නැද්ද?

$("body *").not(".form_wrapper").click(function() {

});

හෝ

$("body *:not(.form_wrapper)").click(function() {

});

4
මෙම පිළිතුර නිවැරදි නොවේ. මෙහි ඇති බොහෝ පිළිතුරු මෙන්, .form_wrapperඔබ එහි දරුවන් ක්ලික් කළ විට මෙය සැඟවී යනු ඇත (වෙනත් ගැටළු අතර).
මාර්ක් අමරි

6

සිනිඳු පවා:

$("html").click(function(){ 
    $(".wrapper:visible").hide();
});

4
මෙම පිළිතුර නිවැරදි නොවේ. .wrapperඔබ ඉල්ලූ දේ නොවන පිටුවෙහි ඔබ කොතැන ක්ලික් කළත් මෙය සැඟවෙනු ඇත .
මාර්ක් අමරි

6

එක් විශේෂිත අංගයක් සැඟවීමට DOM මත ඇති සෑම ක්ලික් කිරීමකටම ඇහුම්කන් දෙනවා වෙනුවට, ඔබට tabindexදෙමව්පියන්ට සකසා <div>සවන් දිය හැකියfocusout සිදුවීම් .

සැකසීමෙන් සිදුවීම වෙඩි තබා ඇති tabindexබවට සහතික blurවේ<div> (සාමාන්‍යයෙන් එය එසේ නොවේ).

එබැවින් ඔබේ HTML එක පෙනෙන්නේ:

<div class="form_wrapper" tabindex="0">
    <a class="agree" href="javascript:;">I Agree</a>
    <a class="disagree" href="javascript:;">Disagree</a>
</div>

සහ ඔබේ JS:

$('.form_wrapper').on('focusout', function(event){
    $('.form_wrapper').hide();
});

5

IPAD සහ IPHONE වැනි ස්පර්ශ උපාංග සඳහා අපට පහත කේතය භාවිතා කළ හැකිය

$(document).on('touchstart', function (event) {
var container = $("YOUR CONTAINER SELECTOR");

if (!container.is(e.target) // if the target of the click isn't the container...
&& container.has(e.target).length === 0) // ... nor a descendant of the container
    {
        container.hide();
    }
});

5

මෙන්න මම වෙනත් ත්‍රෙඩ් එකක සොයාගත් jsfiddle, esc යතුර සමඟද ක්‍රියා කරයි: http://jsfiddle.net/S5ftb/404

    var button = $('#open')[0]
    var el     = $('#test')[0]

    $(button).on('click', function(e) {
      $(el).show()
      e.stopPropagation()
    })

    $(document).on('click', function(e) {
      if ($(e.target).closest(el).length === 0) {
        $(el).hide()
      }
    })

    $(document).on('keydown', function(e) {
      if (e.keyCode === 27) {
        $(el).hide()
      }
    })

මම එය .. මේ 'මත ක්ලික් කරන්න' උත්සවය #test අංගයක් තුළ ද යන්න හඳුනා ලෙස සබැඳි tesing උත්සාහ බලන්න jsfiddle.net/TA96A ඔවුන් වැඩ කරනු වැනි සහ පෙනුම.
තෝමස් ඩබ්ලිව්

ඔව්, එය jsfiddle සබැඳි වලින් පිටත අවහිර වන බවක් පෙනේ. ඔබ http: // jsfiddle.net භාවිතා කරන්නේ නම් ප්‍රති result ල පිටුව සබැඳිය සකසන බව ඔබට පෙනෙනු ඇත :)
djv

5

Prc322 හි නියම පිළිතුරෙන් නිමවා ඇත.

function hideContainerOnMouseClickOut(selector, callback) {
  var args = Array.prototype.slice.call(arguments); // Save/convert arguments to array since we won't be able to access these within .on()
  $(document).on("mouseup.clickOFF touchend.clickOFF", function (e) {
    var container = $(selector);

    if (!container.is(e.target) // if the target of the click isn't the container...
        && container.has(e.target).length === 0) // ... nor a descendant of the container
    {
      container.hide();
      $(document).off("mouseup.clickOFF touchend.clickOFF");
      if (callback) callback.apply(this, args);
    }
  });
}

මෙය කරුණු කිහිපයක් එකතු කරයි ...

  1. "අසීමිත" ආරුක්කු සහිත ඇමතුමක් සහිත ශ්‍රිතයක් තුළ ස්ථානගත කර ඇත
  2. Jquery හි .off () වෙත ඇමතුමක් එක් කරන ලදි, එය ක්‍රියාත්මක වූ පසු ලේඛනයෙන් එය ඉවත් කිරීම සඳහා සිදුවීම් නාම අවකාශයක් සමඟ යුගලනය වේ.
  3. ජංගම ක්‍රියාකාරිත්වය සඳහා ස්පර්ශක ඇතුළත් වේ

මම හිතනවා මේක කෙනෙකුට උදව් කරයි කියලා!


4

ඔබට ios සමඟ ගැටළුවක් ඇත්නම්, ඇපල් උපාංගයේ මූසිකය ක්‍රියා නොකරයි.

jquery හි mousedown / mouseup අයිපෑඩ් සඳහා වැඩ කරයිද?

මම මෙය භාවිතා කරමි:

$(document).bind('touchend', function(e) {
        var container = $("YOURCONTAINER");

          if (container.has(e.target).length === 0)
          {
              container.hide();
          }
      });

4

(Prc322 හි පිළිතුරට එකතු කිරීම පමණි.)

මගේ නඩුවේදී මම මෙම කේතය භාවිතා කරන්නේ පරිශීලකයා සුදුසු ටැබ් එකක් ක්ලික් කළ විට දිස්වන සංචාලන මෙනුවක් සැඟවීමට ය. අමතර කොන්දේසියක් එක් කිරීම ප්‍රයෝජනවත් බව මට පෙනී ගියේය, කන්ටේනරයෙන් පිටත ක්ලික් කිරීමේ ඉලක්කය සබැඳියක් නොවන බව.

$(document).mouseup(function (e)
{
    var container = $("YOUR CONTAINER SELECTOR");

    if (!$("a").is(e.target) // if the target of the click isn't a link ...
        && !container.is(e.target) // ... or the container ...
        && container.has(e.target).length === 0) // ... or a descendant of the container
    {
        container.hide();
    }
});

මෙයට හේතුව මගේ වෙබ් අඩවියේ සමහර සබැඳි පිටුවට නව අන්තර්ගතයන් එක් කිරීමයි. සංචාලන මෙනුව අතුරුදහන් වන අවස්ථාවේදීම මෙම නව අන්තර්ගතය එකතු කළ හොත් එය පරිශීලකයාට ව්‍යාකූල විය හැකිය.


4

බොහෝ පිළිතුරු, එකක් එකතු කිරීමට ඡේදයේ අයිතියක් විය යුතුය ... මම වත්මන් (jQuery 3.1.1) පිළිතුරු දුටුවේ නැත - එබැවින්:

$(function() {
    $('body').on('mouseup', function() {
        $('#your-selector').hide();
    });
});

3
var n = 0;
$("#container").mouseenter(function() {
n = 0;

}).mouseleave(function() {
n = 1;
});

$("html").click(function(){ 
if (n == 1) {
alert("clickoutside");
}
});

3
 $('body').click(function(event) {
    if (!$(event.target).is('p'))
    {
        $("#e2ma-menu").hide();
    }
});

pයනු මූලද්‍රව්‍යයේ නමයි. කෙනෙකුට හැඳුනුම්පත හෝ පන්තිය හෝ මූලද්‍රව්‍ය නාමය ද සමත් විය හැකිය.


3

ඔබ .form_wrapper මත ක්ලික් කළහොත් ව්‍යාජ ලෙස ආපසු යන්න:

$('body').click(function() {
  $('.form_wrapper').click(function(){
  return false
});
   $('.form_wrapper').hide();
});

//$('.form_wrapper').click(function(event){
//   event.stopPropagation();
//});

3

පෝරම එතීමෙන් පිටත ඉහළ මට්ටමේ අංග වෙත ක්ලික් කිරීමේ සිදුවීමක් අමුණන්න, උදාහරණයක් ලෙස:

$('#header, #content, #footer').click(function(){
    $('.form_wrapper').hide();
});

මෙය ස්පර්ශ උපාංගවල ද ක්‍රියා කරනු ඇත, ඔබගේ තේරීම් ලැයිස්තුවේ .form_wrapper හි දෙමාපියෙකු ඇතුළත් නොකිරීමට වග බලා ගන්න.



3

$(document).ready(function() {
	$('.modal-container').on('click', function(e) {
	  if(e.target == $(this)[0]) {
		$(this).removeClass('active'); // or hide()
	  }
	});
});
.modal-container {
	display: none;
	justify-content: center;
	align-items: center;
	position: absolute;
	top: 0;
	left: 0;
	right: 0;
	bottom: 0;
	background-color: rgba(0,0,0,0.5);
	z-index: 999;
}

.modal-container.active {
    display: flex;  
}

.modal {
	width: 50%;
	height: auto;
	margin: 20px;
	padding: 20px;
	background-color: #fff;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="modal-container active">
	<div class="modal">
		<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean ac varius purus. Ut consectetur viverra nibh nec maximus. Nam luctus ligula quis arcu accumsan euismod. Pellentesque imperdiet volutpat mi et cursus. Sed consectetur sed tellus ut finibus. Suspendisse porttitor laoreet lobortis. Nam ut blandit metus, ut interdum purus.</p>
	</div>
</div>


3

Https://sdtuts.com/click-on-not-specified-element/ වෙතින් පිටපත් කරන ලදි

සජීවී නිරූපණය http://demos.sdtuts.com/click-on-specified-element

$(document).ready(function () {
    var is_specified_clicked;
    $(".specified_element").click(function () {
        is_specified_clicked = true;
        setTimeout(function () {
            is_specified_clicked = false;
        }, 200);
    })
    $("*").click(function () {
        if (is_specified_clicked == true) {
//WRITE CODE HERE FOR CLICKED ON OTHER ELEMENTS
            $(".event_result").text("you were clicked on specified element");
        } else {
//WRITE CODE HERE FOR SPECIFIED ELEMENT CLICKED
            $(".event_result").text("you were clicked not on specified element");
        }
    })
})

2

මම මේ වගේ දෙයක් කළා:

var close = true;

$(function () {

    $('body').click (function(){

        if(close){
            div.hide();
        }
        close = true;
    })


alleswasdenlayeronclicknichtschliessensoll.click( function () {   
        close = false;
    });

});

2
dojo.query(document.body).connect('mouseup',function (e)
{
    var obj = dojo.position(dojo.query('div#divselector')[0]);
    if (!((e.clientX > obj.x && e.clientX <(obj.x+obj.w)) && (e.clientY > obj.y && e.clientY <(obj.y+obj.h))) ){
        MyDive.Hide(id);
    }
});

2

මෙම කේතය භාවිතා කිරීමෙන් ඔබට අවශ්‍ය තරම් අයිතම සැඟවිය හැක

var boxArray = ["first element's id","second element's id","nth element's id"];
   window.addEventListener('mouseup', function(event){
   for(var i=0; i < boxArray.length; i++){
    var box = document.getElementById(boxArray[i]);
    if(event.target != box && event.target.parentNode != box){
        box.style.display = 'none';
    }
   }
})

1

ඔබට කළ හැක්කේ, ඩ්‍රොප් ඩවුන් එකෙන් පිටත යමක් ක්ලික් කළ හොත් එය ඩ්‍රොප් ඩවුන් සැඟවිය හැකි ලේඛනයක් මත ක්ලික් කිරීමකි, නමුත් ඩ්‍රොප් ඩවුන් එක ඇතුළත යමක් ක්ලික් කළහොත් එය සඟවන්නේ නැත, එබැවින් ඔබේ “පෙන්වන්න” සිද්ධිය (හෝ ස්ලයිඩවුන් හෝ වෙනත් ඕනෑම දෙයක්) පහත වැටීම පෙන්වයි)

    $('.form_wrapper').show(function(){

        $(document).bind('click', function (e) {
            var clicked = $(e.target);
            if (!clicked.parents().hasClass("class-of-dropdown-container")) {
                 $('.form_wrapper').hide();
            }
        });

    });

ඉන්පසු එය සැඟවී ඇති විට, ක්ලික් කිරීමේ සිද්ධිය බැඳ තබන්න

$(document).unbind('click');

0

මෙම ලේඛන අනුව , .blur()වඩා වැඩි කාලයක් වැඩ <input>ටැගය. උදාහරණයක් වශයෙන්:

$('.form_wrapper').blur(function(){
   $(this).hide();
});

-1, වැඩ කරන්නේ නැහැ. ඉතා සිත්ගන්නා අදහසක්, නමුත් jQuery ලියකියවිලි වැරදිය. ශුද්ධාසනයේ developer.mozilla.org/en-US/docs/Web/API/... , නිදසුනක් ලෙස: "MSIE කිරීමට වෙනස්ව - අංග, සියලු වර්ගවල පාහේ නොපැහැදිලි අවස්ථාවට ලබා ඇති - ගෙකෝ බ්රව්සර මත වර්ග මූලද්රව්ය සියල්ලක්ම පාහේ මෙම සිදුවීම සමඟ වැඩ නොකරන්න. ” එසේම, ක්‍රෝම් හි පරීක්‍ෂා කර ඇති අතර divකිසි විටෙකත් නොපැහැදිලි - නොපැහැදිලි සිදුවීම් ඔවුන්ගේ දරුවන්ගෙන් පවා බුබුලු දැමිය නොහැක. අවසාන වශයෙන්, ඉහත කරුණු සත්‍ය නොවුනත්, මෙය ක්‍රියාත්මක වන්නේ .form_wrapperපරිශීලකයා එය ක්ලික් කිරීමට පෙර අවධානය යොමු වී ඇති බවට ඔබ සහතික කළහොත් පමණි .
මාර්ක් අමරි
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.