View Full Version : سوال: تفاوت بین این دو قسمت کد چیست؟
hp1361
پنج شنبه 12 خرداد 1390, 11:31 صبح
با عرض سلام و خسته نباشید به دوستان عزیز
سوال من اینه که در قطعه کد زیر فرق بین Blur اول با Blur دوم چیست
<script type="text/javascript">
$(document).ready(function() {
var searchBox = $('#<%=TextBox1.ClientID%>');
searchBox.blur(
function() {
if (searchBox.val() == "") {
searchBox.addClass("defaultText");
searchBox.val(this.title);
}
});
searchBox.blur();
});
</script>
mehdi.mousavi
سه شنبه 17 خرداد 1390, 23:20 عصر
با عرض سلام و خسته نباشید به دوستان عزیز
سوال من اینه که در قطعه کد زیر فرق بین Blur اول با Blur دوم چیست
<script type="text/javascript">
$(document).ready(function() {
var searchBox = $('#<%=TextBox1.ClientID%>');
searchBox.blur(
function() {
if (searchBox.val() == "") {
searchBox.addClass("defaultText");
searchBox.val(this.title);
}
});
searchBox.blur();
});
</script>
سلام.
blur اول، داره یک Event Handler تعریف میکنه، به این معنا که هر وقت Focus از TextBox1 گرفته شده، function ای که به blur اول داده اید Call بشه. اما blur دوم، باعث میشه تا کلیه Event Handler هایی که برای blur روی همون TextBox تعریف کرده اید، Call بشه. (در واقع برای اولین بار که DOM Doc. لود میشه، شما دارید بصورت دستی blur رو نیز Call می کنید). دفعات بعدی وقتی blur فراخوانی میشه که Focus از TextBox1 گرفته بشه.
موفق باشید.
hp1361
چهارشنبه 25 خرداد 1390, 22:04 عصر
با سلام مجدد و تشکر از دوست عزیز آقای موسوی
میشه بفرمائید JQuery از کجا می فهمه کدوم تعریف یک Handler ست و دیگری فراخوانی اون.چون معمولا توی C# یا Delphi برنامه نوشتم و اونجا اول در یک مکانی جدا تابع رو تعریف می کردیم و بعد فراخوانیش می کردیم اما اینجا محل تعریف و فراخوانی یک جاست.
ممنون
mehdi.mousavi
چهارشنبه 25 خرداد 1390, 23:14 عصر
با سلام مجدد و تشکر از دوست عزیز آقای موسوی میشه بفرمائید JQuery از کجا می فهمه کدوم تعریف یک Handler ست و دیگری فراخوانی اون.چون معمولا توی C# یا Delphi برنامه نوشتم و اونجا اول در یک مکانی جدا تابع رو تعریف می کردیم و بعد فراخوانیش می کردیم اما اینجا محل تعریف و فراخوانی یک جاست. ممنون
سلام.
کدی رو که شما نوشتید، من یک بار دیگه اینجا می نویسم تا Indenting اون درست بشه و خوانا باشه:
$(document).ready(function () {
var searchBox = $('#<%=TextBox1.ClientID%>');
searchBox.blur(function () {
if (searchBox.val() == "") {
searchBox.addClass("defaultText");
searchBox.val(this.title);
}
});
searchBox.blur();
});
فراخوانی اول تابع blur رو بدقت نگاه کنید. بعنوان پارامتر، داریم یک تابع به blur پاس میدیم. پس jQuery میدونه که اینجا وقتی blur رخ داد، باید تابع callback ما رو Call کنه. اما در فراخوانی دوم، پارامتری بهش پاس نمیکنیم. پس jQuery میدونه callback ای وجود نداره، پس باید تابع blur رو call کنه...
اما حالا که این سوال رو کردید، اجازه بدید تا کد فوق رو یکبار دیگر به شکل بهتری بنویسیم:
$(function () {
$('#<%=TextBox1.ClientID%>').blur(function () {
var self = $(this);
if (self.val() == '') {
self.addClass('defaultText').val(this.title);
}
}).blur();
});
موفق باشید.
hp1361
پنج شنبه 26 خرداد 1390, 10:42 صبح
سلام مجدد
بعنوان پارامتر، داریم یک تابع به blur پاس میدیم. پس jQuery میدونه که اینجا وقتی blur رخ داد، باید تابع callback ما رو Call کنه
پس jQuery در فراخوانی اول تابع پاس داده شده رو اجرا میکنه.درسته؟یا شاید من مفهوم تابع callback رو نمی دونم!
میشه بیشتر توضیح بدید؟یا اگه خارج از حوصله ست کتابی معرفی کنید میرم می خونم
ممنون
mehdi.mousavi
پنج شنبه 26 خرداد 1390, 11:46 صبح
سلام مجدد پس jQuery در فراخوانی اول تابع پاس داده شده رو اجرا میکنه.درسته؟یا شاید من مفهوم تابع callback رو نمی دونم! میشه بیشتر توضیح بدید؟یا اگه خارج از حوصله ست کتابی معرفی کنید میرم می خونم ممنون
سلام.
بله، اما اون callback رو وقتی اجرا میکنه که عمل blur رخ بده. عمل blur کی رخ میده؟
وقتی focus از روی textbox برداشته بشه.
خود شما دستی blur رو روی اون textbox فراخوانی کنید.
در حقیقت، blur یه alias برای تابع زیر هستش:
$('#<%=TextBox1.ClientID%>').bind('blur', function() {
//whatever...
});
کد فوق، تفاوتی با کد زیر نداره:
$('#<%=TextBox1.ClientID%>').blur(function() {
//whatever...
});
موفق باشید.
alismith
پنج شنبه 26 خرداد 1390, 13:24 عصر
سلام
}).blur();
searchBox.blur();
پاسخ استاد کامل بود ، ولی گفتم یک چیز کوچکی هم من بگم :
دو دستور فوق فقط در اولین زمان لود صفحه اجرا می شوند و رویداد blur را از طریق blur() اجرا می کنند و این event hedler ، تابع ما را صدا میزند که قرار هست یکسری تغییراتی در شی ما ایجاد کند (خودکار عمل می کند)
اما اگر از دستورات فوق استفاده نشود باز هم این تابع برای رویداد blur تنظیم شده و در این صورت شرط اجرا تابع ایجاد این رویداد توسط خود کاربر هست
امیدوارم توضیح کامل بوده باشه، البته با وجود استاد نیازی به این چند خط توضیح نبود...
موفق باشید
hp1361
سه شنبه 31 خرداد 1390, 00:06 صبح
سلام مجدد
فکر میکنم با تعریفی که از blur به عنوان یک alias اقای موسوی ارائه دادن دوزاریم کامل افتاد.
پس در خط اول ما داریم یک سری چیزهارو به عنوان تابع به تابع اصلی مون که همون blur باشه پاس میدیم،الصاق میکنیم،بایند میکنیم.jQuery این امکان رو برای راحتی ما گذاشته که عمل بایند کردن رو شبیه فراخوانی تابع بنویسیم اما خودش با توجه به ورودی تشخیص میده که اوضاع از چه قراره!
در فراخوانی دوم هم که مشهوده که یک فراخوانی عادیه و ما بصورت دستی اجرا شدن blur رو انجام میدیم!
باز هم متشکرم از دوستان
mehdi.mousavi
سه شنبه 31 خرداد 1390, 13:07 عصر
سلام.
بله، دقیقا همینطوره و این مساله به blur محدود نمیشه. جدول زیر رو نگاه کنید (از کتاب jQuery in Action):
71430
موفق باشید.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.