ورود

View Full Version : سوال در مورد یک رویداد



Mohsen.
دوشنبه 27 شهریور 1391, 10:21 صبح
سلام دوستان
میخواستم بدونم رویدادی هست که وقتی جایی به غیر از شی مورد نظر کلیک کنی اجرا بشه.
من چند تا پنجره popup درست کردم میخوام هر وقت جایی غیر از اون کلیک شد اون پنجره بسته بشه.
خیلی ممنون:بوس:

mrgraphy
دوشنبه 27 شهریور 1391, 12:27 عصر
سلام.
چنین چیزی خیلی ساده هست.
شما باید توسط متد کلیک توی جی کوئری این کارو انجام بدی به این صورت که یه آیدی یا کلاس واسه ی اون پاپ آپ در نظر بگیری و بگی هرجا کلیک شد غیر از این پاپ آپ بسته بشه.
چند تا راه داره من یه مثال واسه شما مینیویسم.



<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<script src="jquery-1.7.2.min.js" type="text/javascript"></script>
<script type="text/javascript">

$(document).ready(function(){

$(document).click(function(){
alert('you clicked out side of popup');
});

$('.popup').click(function(e) {
e.stopPropagation();
alert('in pop up');
});

});

</script>

<style type="text/css">

.popup {
width:200px;
height:120px;
position:absolute;
background:#CCC;
border: 2px solid #F00;
top:45%;
left:45%;
}

</style>
</head>

<body>

<div class="popup"></div>

</body>
</html>



این صفحه یک div در وسطش قرار داره که اگر روی div کلیک کنی در alert به شما میده که in popup و اگر هر جایی غیر از اون کلیک کنی یک alert دیگه.
این چطوری کار میکنه؟
این طوری که تعریف کردم اگر روی سند یا document کلیک شد یک alert نشون بده اما مسئله اینکه همه چیز حتی اون div هم جزء سند حساب میشن واگر رو ی اون کلیک بکنیم باید بازم باید alert رو به ما نشون بده.
برای جلوگیری از این کار اومدم یک event دیگه واسه ی خود popup نوشتم که اگر روی اینpopup کلیک شد هیچ اتفاقی توی سند نیوفته . چطوری؟ با استفاده از stoppropagation.
این متد میاد جلوی انتشار همه ی event های قبلی رو میگیره و نمیازه اتفاقی بیوفته و بعد از این متد اگر کدی بنویسید اجرا میشه.
امیدوارم کمکتون کرده باشم.

Mohsen.
دوشنبه 27 شهریور 1391, 13:15 عصر
ممنون
اما در این کد:

$(document).click(function(){
alert('you clicked out side of popup');
});

وقتی به جای alert یک تابع رو فراخوانی میکنم تابع document.click حدود 683 بار فراخونی میشه و بعد هم overflow میکنه.

Mohsen.
دوشنبه 27 شهریور 1391, 19:25 عصر
به مشکلی که من در بالا به اون برخوردم کسی برنخورده!!
اگه راه حل دیگه ای هم برای بستن پنجره های popup در نظر دارید بگید. متشکر

Variable
دوشنبه 27 شهریور 1391, 21:32 عصر
document.addEventListener('click',function(e){
if(e.target.nodeName=="BODY"){
alert('outside');
}
else
if(e.target.id=="yourElement")
{
alert('inside')
}

},false);

$(document).click(function(e){
if(e.target.nodeName=="BODY"){
alert('outside');
}
else
if(e.target.id=="yourElement")
{
alert('inside')
}
});


منظورم استفاده از delegate کردن رویداد به عنصر والد
و بعد استفاده از if برای تصمیم گیری
یکیشو با حی کوئری
اون یکی با جاوا اسکریپته