You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: 2-ui/2-events/04-default-browser-action/article.md
+23-22Lines changed: 23 additions & 22 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,36 +1,37 @@
1
-
# اقدامات پیشفرض مرورگر
1
+
# اکشنهای پیشفرض مرورگر
2
2
3
-
بسیاری از رویدادها اقدامات خودبهخودی از سمت مرورگر را در پی دارند
3
+
بسیاری از رویدادها اقدامات خودبهخودی از سمت مرورگر را در پی دارند
4
4
5
5
برای نمونه:
6
6
7
7
- یک کلیک بر روی لینک - شما را به آدرس موردنظر میرساند
8
8
- یک کلیک روی دکمه ارسال فرم - تایید و ارسال فرم به سرور آغاز میشود.
9
9
- فشردن دکمه ماوس برروی متن و حرکت دادن آن - متن را انتخاب میکند
10
10
11
-
اگر بخواهیم که یک رویداد را در جاوااسکریپت مدیریت کنیم، ممکن است نخواهیم تا اکشن پیشفرض مرورگر اتفاق بیفتد، و بخواهیم که رفتار متفاوتی به جای آن را پیادهسازی کنیم.
11
+
اگر بخواهیم که یک رویداد را در جاوااسکریپت مدیریت کنیم ممکن است نخواهیم تا اکشن پیشفرض مرورگر اتفاق بیفتد و بخواهیم که رفتار متفاوتی به جای آن را پیادهسازی کنیم.
12
12
13
-
## جلوگیری از اقدامات مرورگر
13
+
## جلوگیری از اکشنهای مرورگر
14
14
15
15
دو راه برای اینکه به مرورگر بگوییم نمیخواهیم تا رفتار پیشفرض را انجام دهد وجود دارد:
16
16
17
-
- راه اصلی استفاده از آبجکت `event` است. متدی به نام `event.preventDefault()` وجود دارد.
18
-
- اگر هندلر با استفاده از `on<event>` مشخص شده باشد (نه با `addEventListener`) آنگاه بازگرداندن مقدار `false` به طرز مشابه عمل خواهد کرد.
17
+
- راه اصلی استفاده از آبجکت `event` است. متدی به نام `()event.preventDefault` وجود دارد.
18
+
- اگر هندلر با استفاده از `<on<event` مشخص شده باشد (نه با `addEventListener`) آنگاه بازگرداندن مقدار `false` به همین صورت عمل خواهد کرد.
19
19
20
20
در این فایل HTML, کلیک بر روی یک لینک منجر به تغییر آدرس مروگر نمیشود; مرورگر کاری نمیکند:
21
21
22
22
```html autorun height=60 no-beautify
23
23
<ahref="/"onclick="return false">اینجا را کلیک کنید</a>
این بخاطر آن است که اکشن مرورگر برروی `mousedown` لغو شده است. فوکوس کردن همچنان امکانپذیر است اگر ما راه دیگری برای وارد کردن اینپوت استفاده کنیم. برای مثال کلید `Tab` برای انتقل از اینپوت اول به دوم. اما بدون استفاده از کلیک ماوس.
94
+
این بخاطر آن است که اکشن مرورگر برروی `mousedown` لغو شده است. فوکوس کردن همچنان امکانپذیر است اگر ما راه دیگری برای وارد کردن اینپوت استفاده کنیم. برای مثال کلید `Tab` برای انتقال از اینپوت اول به دوم اما بدون استفاده از کلیک ماوس.
94
95
````
95
96
96
97
# <<<<<<< HEAD
97
98
98
-
## گزینه هندلر "passive"
99
+
## امکان هندلر "passive"
99
100
100
-
آپشن اختیاری `passive: true` از `addEventListener` این سیگنال را به مرورگر میدهد که مرورگر هندلر `preventDefault()` را صدا نخواهد کرد..
101
+
آپشن اختیاری `passive: true` از `addEventListener` این سیگنال را به مرورگر میدهد که مرورگر هندلر `()preventDefault` را صدا نخواهد کرد.
101
102
102
103
چرا ممکن است که به این آپشن نیاز پیدا کنیم؟
103
104
104
-
ایونت هایی همچون `touchmove` در دیوایسهای موبایلی وجود دارند (زمانی که یوزر انگشت خود را برروی صفحهنمایش حرکت میدهد) که به صورت پیشفرض باعث اسکرول میشوند اما این اسکرول خوردن میتواند با وجود `preventDefault()` در هندلر جلوگیری شود.
105
+
ایونت هایی همچون `touchmove` در دیوایسهای موبایلی وجود دارند (زمانی که یوزر انگشت خود را برروی صفحهنمایش حرکت میدهد) که به صورت پیشفرض باعث اسکرول میشوند اما این اسکرول خوردن میتواند با وجود `()preventDefault` در هندلر جلوگیری شود.
105
106
106
107
بنابراین زمانی که مرورگر چنین ایونتی را شناسایی میکند اول از همه باید همهی هندلرهارا بررسی کرده و اگر `preventDefault` جایی صدا زده نشده باشد میتواند با اسکرول خوردن ادامه یابد که این میتواند سبب تاخیرها و لرزشهای غیرضروری شود.
حالا همه چیز به درستی کار میکند. این راه حل حتی اگر المنتهای تودرتویی داشته باشیم که هرکدام منوی خودشان را داشته باشند هم کار میکند. فقط اطمینان حاصل کنید که `event.defaultPrevented` در هر یک از هندلرهای `contextmenu` چک میشود.
211
212
212
213
```smart header="event.stopPropagation() and event.preventDefault()"
213
-
به خوبی میتوانیم ببینیم که `event.stopPropagation()` و `event.preventDefault()` (که همچنین به عنوان `return false` شناخته میشود) دو چیز متفاوت از هم هستند که به یکدیگر ربطی ندارند.
214
+
واضح است که `()event.stopPropagation` و `()event.preventDefault` (که همچنین به عنوان `return false` شناخته میشود) دو چیز متفاوت از هم هستند که به یکدیگر ربطی ندارند.
همچنین راههای جایگزینی برای پیادهسازی منوهای تودرتو وجود دارد. یکی از آنها این است که یک آبجکت گلوبال با یک هندلر برای `document.oncontextmenu` داشته باشیم و همچنین متدهایی که به ما اجازه میدهند تا دیگر هندلرهایی را در آن ذخیره کنیم.
218
219
219
220
آبجت هرگونه کلیک راستی را گرفته، نگاهی به هندلرهای آن میاندازد و هندلر مناسب را اجرا میکند.
اگر بخواهیم تا ایونت را به طور خاص با جاوااسکریپت هندل کنیم میتوانیم از همهی اکشنهای پیشفرض جلوگیری کنیم.
236
237
237
-
برای جلوگیری از یک اکشن پیشفرض میتوانیم از `event.preventDefault()` یا `return false` استفاده کنیم. دومین متد تنها برای هندلرهای اختصاص یافته با `on<event>` کار میکند.
238
+
برای جلوگیری از یک اکشن پیشفرض میتوانیم از `()event.preventDefault` یا `return false` استفاده کنیم. دومین متد تنها برای هندلرهای اختصاص یافته با `<on<event` کار میکند.
238
239
239
240
اگر از اکشن پیشفرض جلوگیری شده باشد مقدار `event.defaultPrevented` به `true` تغییر میکند در غیراینصورت `false` میشود.
این موضوع علاوه بر اینکه "چیز خوبی است" کد HTML شما را از نظر دسترسیپذیری بهتر میکند.
247
248
248
-
علاوه بر این اگر مثال `<a>` را درنظر بگیریم باید به این نکته توجه کنید که: یک مرورگر به ما این اجازه را میدهد تا این لینکها را در یک پنجره جدید باز کنیم (بار کلیک راست برروی منوها) و کاربران این رو دوست دارند. اما اگر کاری کنیم که یک دکمه مانند لینک رفتار کند و حتی با استفاده از css ظاهرش را مانند یک لینک کنیم آنگاه ویژگیهای منحصر به فرد تگ `<a>` برای آن عمل نخواهد کرد.
249
+
علاوه بر این اگر مثال `<a>` را درنظر بگیریم باید به این نکته توجه کنید که: یک مرورگر به ما این اجازه را میدهد تا این لینکها را در یک پنجره جدید باز کنیم (با کلیک راست برروی منوها) و کاربران این رفتار را دوست دارند. اما اگر کاری کنیم که یک دکمه مانند لینک رفتار کند و حتی با استفاده از css ظاهرش را مانند یک لینک کنیم آنگاه ویژگیهای منحصر به فرد تگ `<a>` برای آن عمل نخواهد کرد.
0 commit comments