Skip to content

Commit 226cc3b

Browse files
committed
wip: update article.md -- browser-default actions
1 parent 648043e commit 226cc3b

1 file changed

Lines changed: 23 additions & 22 deletions

File tree

2-ui/2-events/04-default-browser-action/article.md

Lines changed: 23 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,37 @@
1-
# اقدامات پیشفرض مرورگر
1+
# اکشن‌های پیشفرض مرورگر
22

3-
بسیاری از رویدادها اقدامات خودبه‌‍خودی از سمت مرورگر را در پی دارند
3+
بسیاری از رویدادها اقدامات خودبه‌خودی از سمت مرورگر را در پی دارند
44

55
برای نمونه:
66

77
- یک کلیک بر روی لینک - شما را به آدرس موردنظر میرساند
88
- یک کلیک روی دکمه ارسال فرم - تایید و ارسال فرم به سرور آغاز می‌شود.
99
- فشردن دکمه ماوس برروی متن و حرکت دادن آن - متن را انتخاب می‌کند
1010

11-
اگر بخواهیم که یک رویداد را در جاوااسکریپت مدیریت کنیم، ممکن است نخواهیم تا اکشن پیشفرض مرورگر اتفاق بیفتد، و بخواهیم که رفتار متفاوتی به جای آن را پیاده‌سازی کنیم.
11+
اگر بخواهیم که یک رویداد را در جاوااسکریپت مدیریت کنیم ممکن است نخواهیم تا اکشن پیشفرض مرورگر اتفاق بیفتد و بخواهیم که رفتار متفاوتی به جای آن را پیاده‌سازی کنیم.
1212

13-
## جلوگیری از اقدامات مرورگر
13+
## جلوگیری از اکشن‌های مرورگر
1414

1515
دو راه برای اینکه به مرورگر بگوییم نمیخواهیم تا رفتار پیشفرض را انجام دهد وجود دارد:
1616

17-
- راه اصلی استفاده از آبجکت `event` است. متدی به نام `event.preventDefault()` وجود دارد.
18-
- اگر هندلر با استفاده از `on<event>` مشخص شده باشد (نه با `addEventListener`) آنگاه بازگرداندن مقدار `false` به طرز مشابه عمل خواهد کرد.
17+
- راه اصلی استفاده از آبجکت `event` است. متدی به نام `()event.preventDefault` وجود دارد.
18+
- اگر هندلر با استفاده از `<on<event` مشخص شده باشد (نه با `addEventListener`) آنگاه بازگرداندن مقدار `false` به همین صورت عمل خواهد کرد.
1919

2020
در این فایل HTML, کلیک بر روی یک لینک منجر به تغییر آدرس مروگر نمی‌شود; مرورگر کاری نمی‌کند:
2121

2222
```html autorun height=60 no-beautify
2323
<a href="/" onclick="return false">اینجا را کلیک کنید</a>
24-
or
24+
یا
2525
<a href="/" onclick="event.preventDefault()">اینجا</a>
2626
```
2727

28-
در مثال بعدی ما از این تکنیک برای ایجاد یک منو با جاوااسکریپت استفاده خواهیم کرد.
28+
در مثال بعدی، ما از این تکنیک برای ایجاد یک منو با جاوااسکریپت استفاده خواهیم کرد.
29+
30+
```warn header="بازگرداندن `false` از یک هندلر یک استثناست"
2931

30-
```warn header="Returning `false` from a handler is an exception"
3132
مقدار بازگردانده شده توسط یک هندلر معمولا نادیده گرفته می‌شود.
3233

33-
تنها استثنا برگردانده شند `return false` از یک هندلر اختصاص داده شده با استفاده از `on<event>` است.
34+
تنها استثنا برگرداندن `return false` از یک هندلر اختصاص داده شده با استفاده از `<on<event` است.
3435

3536
در همه‌ی موارد دیگر مقدار `return` نادیده گرفته می‌شود. به طور خاص بازگرداندن `true` هیچ معنایی ندارد.
3637

@@ -66,10 +67,10 @@ menu.onclick = function(event) {
6667
if (event.target.nodeName != 'A') return;
6768

6869
let href = event.target.getAttribute('href');
69-
alert( href ); // ...can be loading from the server, UI generation etc
70+
alert( href ); // میتواند لود از سرور یا ساخت UI و مانند آن باشد...
7071

7172
*!*
72-
return false; // prevent browser action (don't go to the URL)
73+
return false; // از رفتار پیشفرض مرورگر جلوگیری میکند (به آدرس نرو)
7374
*/!*
7475
};
7576
```
@@ -90,18 +91,18 @@ menu.onclick = function(event) {
9091
<input *!*onmousedown="return false"*/!* onfocus="this.value=''" value="Click me">
9192
```
9293
93-
این بخاطر آن است که اکشن مرورگر برروی `mousedown` لغو شده است. فوکوس کردن همچنان امکان‌پذیر است اگر ما راه دیگری برای وارد کردن اینپوت استفاده کنیم. برای مثال کلید `Tab` برای انتقل از اینپوت اول به دوم. اما بدون استفاده از کلیک ماوس.
94+
این بخاطر آن است که اکشن مرورگر برروی `mousedown` لغو شده است. فوکوس کردن همچنان امکان‌پذیر است اگر ما راه دیگری برای وارد کردن اینپوت استفاده کنیم. برای مثال کلید `Tab` برای انتقال از اینپوت اول به دوم اما بدون استفاده از کلیک ماوس.
9495
````
9596

9697
# <<<<<<< HEAD
9798

98-
## گزینه هندلر "passive"
99+
## امکان هندلر "passive"
99100

100-
آپشن اختیاری `passive: true` از `addEventListener` این سیگنال را به مرورگر میدهد که مرورگر هندلر `preventDefault()` را صدا نخواهد کرد..
101+
آپشن اختیاری `passive: true` از `addEventListener` این سیگنال را به مرورگر میدهد که مرورگر هندلر `()preventDefault` را صدا نخواهد کرد.
101102

102103
چرا ممکن است که به این آپشن نیاز پیدا کنیم؟
103104

104-
ایونت هایی همچون `touchmove` در دیوایس‌های موبایلی وجود دارند (زمانی که یوزر انگشت خود را برروی صفحه‌نمایش حرکت می‌دهد) که به صورت پیشفرض باعث اسکرول می‌شوند اما این اسکرول خوردن میتواند با وجود `preventDefault()` در هندلر جلوگیری شود.
105+
ایونت هایی همچون `touchmove` در دیوایس‌های موبایلی وجود دارند (زمانی که یوزر انگشت خود را برروی صفحه‌نمایش حرکت می‌دهد) که به صورت پیشفرض باعث اسکرول می‌شوند اما این اسکرول خوردن میتواند با وجود `()preventDefault` در هندلر جلوگیری شود.
105106

106107
بنابراین زمانی که مرورگر چنین ایونتی را شناسایی میکند اول از همه باید همه‌ی هندلرهارا بررسی کرده و اگر `preventDefault` جایی صدا زده نشده باشد میتواند با اسکرول خوردن ادامه یابد که این میتواند سبب تاخیرها و لرزش‌های غیرضروری شود.
107108

@@ -117,7 +118,7 @@ menu.onclick = function(event) {
117118

118119
یک مورد استفاده جالب برای این وجود دارد.
119120

120-
به یاد دارید که در فصل <info:bubbling-and-capturing> راجع به `()event.propagation` اینکه چرا bubbling خوب نیست صحبت کردیم؟
121+
به یاد دارید که در فصل <info:bubbling-and-capturing> راجع به `()event.propagation` و اینکه چرا bubbling خوب نیست صحبت کردیم؟
121122

122123
گاهی اوقات برای اینکه به باقی ایونت هندلرها خبر بدهیم که ایونت هندل شده میتوانیم از `event.defaultPrevented` استفاده کنیم.
123124

@@ -133,7 +134,7 @@ menu.onclick = function(event) {
133134
</button>
134135
```
135136

136-
حالا علاوه بر context menu میخواهیم تا یک منو به وسعت داکیومنت پیاده‌سازی کنیم.
137+
حالا علاوه بر context menu میخواهیم تا یک منو تعریف شده در داکیومنت پیاده‌سازی کنیم.
137138

138139
با کلیک‌راست نزدیک‌ترین context menu ظاهر خواهد شد.
139140

@@ -210,10 +211,10 @@ menu.onclick = function(event) {
210211
حالا همه چیز به درستی کار میکند. این راه حل حتی اگر المنت‌های تودرتویی داشته باشیم که هرکدام منوی خودشان را داشته باشند هم کار می‌کند. فقط اطمینان حاصل کنید که `event.defaultPrevented` در هر یک از هندلرهای `contextmenu` چک می‌شود.
211212

212213
```smart header="event.stopPropagation() and event.preventDefault()"
213-
به خوبی میتوانیم ببینیم که `event.stopPropagation()` و `event.preventDefault()` (که همچنین به عنوان `return false` شناخته می‌شود) دو چیز متفاوت از هم هستند که به یکدیگر ربطی ندارند.
214+
واضح است که `()event.stopPropagation` و `()event.preventDefault` (که همچنین به عنوان `return false` شناخته می‌شود) دو چیز متفاوت از هم هستند که به یکدیگر ربطی ندارند.
214215
```
215216

216-
```smart header="Nested context menus architecture"
217+
```smart header="معماری context menu های تودرتو"
217218
همچنین راه‌های جایگزینی برای پیاده‌‍سازی منوهای تودرتو وجود دارد. یکی از آنها این است که یک آبجکت گلوبال با یک هندلر برای `document.oncontextmenu` داشته باشیم و همچنین متدهایی که به ما اجازه می‌دهند تا دیگر هندلرهایی را در آن ذخیره کنیم.
218219
219220
آبجت هرگونه کلیک راستی را گرفته، نگاهی به هندلرهای آن می‌اندازد و هندلر مناسب را اجرا میکند.
@@ -234,7 +235,7 @@ menu.onclick = function(event) {
234235

235236
اگر بخواهیم تا ایونت را به طور خاص با جاوااسکریپت هندل کنیم می‌توانیم از همه‌ی اکشن‌های پیشفرض جلوگیری کنیم.
236237

237-
برای جلوگیری از یک اکشن پیشفرض میتوانیم از `event.preventDefault()` یا `return false` استفاده کنیم. دومین متد تنها برای هندلرهای اختصاص یافته با `on<event>` کار می‌کند.
238+
برای جلوگیری از یک اکشن پیشفرض میتوانیم از `()event.preventDefault` یا `return false` استفاده کنیم. دومین متد تنها برای هندلرهای اختصاص یافته با `<on<event` کار می‌کند.
238239

239240
اگر از اکشن پیشفرض جلوگیری شده باشد مقدار `event.defaultPrevented` به `true` تغییر می‌کند در غیراینصورت `false` می‌شود.
240241

@@ -245,5 +246,5 @@ menu.onclick = function(event) {
245246
246247
این موضوع علاوه بر اینکه "چیز خوبی است" کد HTML شما را از نظر دسترسی‌پذیری بهتر میکند.
247248
248-
علاوه بر این اگر مثال `<a>` را درنظر بگیریم باید به این نکته توجه کنید که: یک مرورگر به ما این اجازه را می‌دهد تا این لینک‌ها را در یک پنجره جدید باز کنیم (بار کلیک راست برروی منوها) و کاربران این رو دوست دارند. اما اگر کاری کنیم که یک دکمه مانند لینک رفتار کند و حتی با استفاده از css ظاهرش را مانند یک لینک کنیم آنگاه ویژگی‌های منحصر به فرد تگ `<a>` برای آن عمل نخواهد کرد.
249+
علاوه بر این اگر مثال `<a>` را درنظر بگیریم باید به این نکته توجه کنید که: یک مرورگر به ما این اجازه را می‌دهد تا این لینک‌ها را در یک پنجره جدید باز کنیم (با کلیک راست برروی منوها) و کاربران این رفتار را دوست دارند. اما اگر کاری کنیم که یک دکمه مانند لینک رفتار کند و حتی با استفاده از css ظاهرش را مانند یک لینک کنیم آنگاه ویژگی‌های منحصر به فرد تگ `<a>` برای آن عمل نخواهد کرد.
249250
```

0 commit comments

Comments
 (0)