تابستون داره تموم میشه ها، فرصت‌ها محدودن کلی آفر جذاب در کمپین تابستون🔥👇
۰ ثانیه
۰ دقیقه
۰ ساعت
۲ عماد چشم آذر
اضافه کردن مقادیر "ژ" و "آ"
مهرداد دادخواه حل شده توسط مهرداد دادخواه

سلام من کد رو کامل نوشتم کار میکنه و برای اضافه کردن ژ و آ هم شرط گذاشتم اگه shiftKey برابر true شد مقادیر keyCode‌ها برابر ژ و آ بشن ولی یک مشکل داره: اینکه بعد از یک بار نگه داشتن shift مقادیر keyCode‌های مد نظر دیگه تغییر میکنه به مقادیر جدید (ژ - آ) 

چطور بدون طولانی شدن کد و نوشتن دوباره لیست برای شرط‌های مختلف میشه این باگ رو برطرف کرد؟

 

                if (event.shiftKey) {
                    PersianChars[67] = 'ژ'
                    PersianChars[72] = 'آ'
                }

سلام
وقت به خیر

علتش اینه که شما دارید لیست (آرایه) ای که دارید را آپدیت میکنید
وقتی اولین بار وارد این شرط بشه دیگه ایندکس ۶۷ از آرایه PersianChars مقدارش ژ خواهد بود

شما به جای اینکه آرایه اصلی‌تون را تغییر بدید باید اونجایی که نمایش داده میشه را تغییر بدید

یا باید از یه متغییر واسطه استفاده کنید یا جایی که نمایش اتفاق میافته شرط بذارید

کد کامل را اگه بذارید راحت‌تر میشه راهنمایی کرد

بهترین پاسخ
مهرداد دادخواه ۰۳ شهریور ۱۴۰۰، ۱۴:۰۶

سلام
باگ رو برطرف کردم
کد هاش رو میزارم البته چنتا باگ دیگه بود اونا رو هم از قبل برطرف کرده بودم:
1_اگه کاربر دستش اشتباهی به دکمه ای غیر دکمه هایی که ما تعریف کردیم میخورد مقدار undefined چاپ میشد
2_بک اسپیس نیاز به تعریف داشت وگرنه مقدار undefined چاپ میشد

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <label for="">what is your name? </label>
    <input type="text" onkeydown="KeyDown(event)">
    <script>
       var PersianChars = {
            72: "ا",
            70: "ب",
            220: "پ",
            74: "ت",
            69: "ث",
            219: "ج",
            221: "چ",
            80: "ح",
            79: "خ",
            78: "د",
            66: "ذ",
            86: "ر",
            67: "ز",
            83: "س",
            65: "ش",
            87: "ص",
            81: "ض",
            88: "ط",
            90: "ظ",
            85: "ع",
            89: "غ",
            82: "ق",
            84: "ف",
            186: "ک",
            222: "گ",
            71: "ل",
            76: "م",
            75: "ن",
            188: "و",
            73: "ه",
            68: "ی",   
            77: "ئ",
        } 
        var PersianShift = {
            67: "ژ",
            72: "آ"
        }
        var PersianCharsKeys = Object.keys(PersianChars).map((i) => Number(i));
        var PersianShiftKeys = Object.keys(PersianShift).map((i) => Number(i));
        // تبدیل کلید‌های هر دو لیست به لیست‌های عددی جدید
        var shift = false;
        function KeyDown(event){
            if (event.shiftKey == true & PersianShiftKeys.includes(event.keyCode)) {
                event.preventDefault();
                event.target.value += PersianShift[event.keyCode]
            }
            else if (PersianCharsKeys.includes(event.keyCode)) {
                event.preventDefault();
                event.target.value += PersianChars[event.keyCode]
            }
        }
    </script>
</body>
</html> 

 

عماد چشم آذر ۱۱ شهریور ۱۴۰۰، ۱۶:۰۹