تابستون داره تموم میشه ها، فرصت‌ها محدودن کلی آفر جذاب در کمپین تابستون🔥👇
۰ ثانیه
۰ دقیقه
۰ ساعت
۸ مهدی محمدی زاده
جواب مینی پروژه تغییر keyCode
جامعه جاوا اسکریپت ایجاد شده در ۱۰ دی ۱۳۹۹

سلام 

توی مینی  ، مینی :) پروژه ایی که داشتیم  استاد این رو گفتن که با استفاده از پراپرتی keyCode میتوان مقدار پیشفرض را با مقدار دلخواه جایگزین کرد ولی مشکلی که بود این بود که خود مقدار ان کلید هم اورده میشد که فرمودند این رو میشه به چندین روش تخلیه کرد ، راستش من حدود نیم ساعت تلاش کردم و امتحان کردم ولی نتیجه نداد تا دست به سرچ شدم و توی سایت stackoverflow  تونستم یک راه حل براش پیدا کنیم که استفاده از تابع preventDefault هستش  ولی فکر کنم باز راه بهتری داشته باشه که ممنون میشم راهنمایی کنید .

 

    <!-- ------------ HTML ------------ -->
    <input type="text" onkeydown="keyDown(event)">

و کد‌های جاوا اسکریپت 


    // ------------ JAVASCRIPTS ------------
    var persianchars = {
        83: "س"
    }
    function keyDown(event) {
        event.preventDefault();
        event.target.value = persianchars[event.keyCode];
    }

 

 

 

چیزی که الان متوجه شدم مشکلی که بود با کد‌های بالا امکان وارد کردن یک کارکتر بیشتر نبود که با اضافه کردن =+ به کد این امر برطرف شد و مشکل بعدیی که داره کد بالا اسپیش را شامل نمیشد که با وارد پیدا کردن کد ان که 32 است اون رو هم اضافه کردم 

که کد پایین کاملتره به نظرم : 

 

 

    <!-- ------------ HTML ------------ -->
    <input type="text" onkeydown="keyDown(event)">

 

     // ------------ JAVASCRIPTS ------------
       var persianchars = {
        32: " ",
        83: "س",
        65: "ش"
    }
    function keyDown(event) {
        console.log(event)
        event.preventDefault();
        event.target.value += persianchars[event.keyCode];
    }

 

 

مهدی محمدی زاده ۱۰ دی ۱۳۹۹، ۱۴:۳۵

منم این سایت رو پیدا کردم جالب بود http://keycode.info/

محمدامین نیکو ۲۷ بهمن ۱۳۹۹، ۱۲:۴۱

قسمت بک اسپیس هم بنده درست کردم 

 var a;
            function keydown(event){
                console.log(event);
                    if (event.keyCode == 8) {
                    a = String(event.target.value);
                    a = a.substring(0, a.length - 1);
                    console.log(a);
                }
                else{
                 event.preventDefault();
                }
                event.target.value+=language[event.keyCode];
            }
            var language={
                83:'س',
                84:'ف',
                16:'',
                18:'',
                8:''
            }
محمدامین نیکو ۲۷ بهمن ۱۳۹۹، ۱۲:۵۷

نمونه کد تمرین که البته میتونه بهتر هم بشه

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Test Page</title>
</head>
<body>
    <div style="text-align: center; margin-top: 100px;">
        <label for="name">نام خود را وارد کنید</label>
        <input type="text" name="name" id="name" onkeydown="checkText(event)" placeholder="کیبورد در حالت انگلیسی باشد">
    </div>
    <script>
        var keyCode = {
            32  :   ' ',
            65  :   'ش',
            66  :   'ذ',
            67  :   'ز',
            68  :   'ی',
            69  :   'ث',
            70  :   'ب',
            71  :   'ل',
            72  :   'ا',
            73  :   'ه',
            74  :   'ت',
            75  :   'ن',
            76  :   'م',
            77  :   'ئ',
            78  :   'د',
            79  :   'خ',
            80  :   'ح',
            81  :   'ض',
            82  :   'ق',
            83  :   'س',
            84  :   'ف',
            85  :   'ع',
            86  :   'ر',
            87  :   'ص',
            88  :   'ط',
            89  :   'غ',
            90  :   'ظ',
            186  :   'ک',
            188  :   'و',
            219  :   'ج',
            220  :   'پ',
            221  :   'چ',
            222  :   'گ',
            shft72  :   'آ',
            shft67  :   'ژ',
        };
        function checkText(event){
            var txt = event.target.value;
            console.log(event);
            if (keyCode[event.keyCode] && !event.ctrlKey){
                event.returnValue = false;
                (event.shiftKey && (event.keyCode === 72 || event.keyCode === 67)) ? txt += keyCode['shft' + event.keyCode]: txt += keyCode[event.keyCode];
            }else{
                txt = event.target.value;
            }
            event.target.value = txt;
        }
    </script>
</body>
</html>
سعید ریحانی ۲۹ بهمن ۱۳۹۹، ۱۶:۵۰
 <input type="text" onkeydown="languageChanger(event)" />
    <p id="textArea"></p>
<script>
      var Farsi = {
        32: ' ',
        65: 'ش',
        66: 'ذ',
        67: 'ز',
        68: 'ی',
        69: 'ث',
        70: 'ب',
        71: 'ل',
        72: 'ا',
        73: 'ه',
        74: 'ت',
        75: 'ن',
        76: 'م',
        77: 'ئ',
        78: 'د',
        79: 'خ',
        80: 'ح',
        81: 'ض',
        82: 'ق',
        83: 'س',
        84: 'ف',
        85: 'ع',
        86: 'ر',
        87: 'ص',
        88: 'ط',
        89: 'غ',
        90: 'ظ',
      };
      function languageChanger(event) {
        if (event.keyCode == 8) {
          let newString = document.getElementById('textArea').innerHTML;
          newString = newString.substring(0, a.length - 1);
          document.getElementById('textArea').innerHTML = newString;
        } else
          document.getElementById('textArea').innerHTML += Farsi[event.keyCode];
      }
    </script>

+back space & space

sara madani ۲۹ بهمن ۱۳۹۹، ۱۷:۳۴

قسمت بک اسپیس  ساده شده کد توسط محمدامین نیکو 

function keydown(event){
                console.log(event);
                    if (event.keyCode != 8) {
                               event.preventDefault();
                              event.target.value+=language[event.keyCode];
            }
عظیم علیدادی ۲۲ مرداد ۱۴۰۰، ۱۱:۱۷

من کد رو به همراه backspace و space نوشتم ولی بدون نیاز به تعریف مجدد اون ها:

کافیه key‌های لیست رو به صورت number داخل یک لیست جدید بریزیم (چون ب صورت پیش فرض string هستند) بعدش شرط بزاریم اگه keyCode‌ها توی لیست جدید هستن، کد ترجمه اجرا بشه و اگه نیستن خاصیت خود کلید‌ها اجرا بشه.
داخل لیست هم فقط دکمه‌های مشترک فارسی و انگلیسی رو تعریف کنیم

*برای تبدیل keyCode‌های لیست به number از stackoverflow کمک گرفتم

        
    <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 PersianKeys = Object.keys(PersianChars).map((i) => Number(i));
            // تبدیل کلید‌ها به یک لیست عددی جدید
            function KeyDown(event){
                if (PersianKeys.includes(event.keyCode)) {
                    event.preventDefault();
                    event.target.value += PersianChars[event.keyCode]
                    console.log(event)
                }
عماد چشم آذر ۲۹ مرداد ۱۴۰۰، ۱۵:۲۳

سلام به همه دوستان فعال در این تاپیک

چه تاپیک خوبی شده

به به

ادامه بدید :) سعی کنید کد را تمیزتر کامل‌تر و بهینه‌تر کنید

مهرداد دادخواه ۰۳ شهریور ۱۴۰۰، ۱۴:۱۳