راکت
حل شده

خطای type error

8 پاسخ

سلام قبل از هر چیز میخواستم تشکر کنم از دوستانی که زحمت میکشن و پاسخ میدن
این لینک مربوط به کدهای من هست لطفا بگید چرا این خطا رو میده و میگه substring is not a function ؟
https://jsbin.com/comikapesa/edit?html,css,js,output

ثبت پرسش جدید

پاسخ‌ها

8
علی محمودی
علی محمودی
@alimahmoudidev

تخصص: Web Developer

بهترین پاسخ

سلام اینطور که من متوجه شدم قرار متن درون کادر با متن ورودی مقایسه بشه مشکل کدتون اینجاست که دارین یک المان رو مقایسه می کنید برای مقایسه محتوای یک المان باید از .textContent استفاده کنین شکل درست کد را براتون پایین ارسال کردم موفق باشید :)
 تصویر

Banana Life
Banana Life
@shift.delete

سلام
این خطا زمانی اتفاق میافته که شما فانکشن substring() استفاده میکنید که مقدارش string نیست شما قبل substring() فانکشنtoString() بزارید و خطا رفع میشه.

let originTextMatch = originText.toString().substring ( '0' , textEntered.length);
مرضیه نکوزاد
مرضیه نکوزاد
@M.Nekoo Zad

ممنون از پاسخ تون🌹
امتحان کردم ولی بازم همون اتفاق افتاد و همون ایراد رو میگیره

شاید پاسخ شما همین‌جا باشد

میلاد-م
میلاد-م
@milad

تخصص: توسعه‌دهنده رابط کاربری - Front-End

چون originText بایستی از نوع رشته ای (string) باشه تا بتونید از این تابع استفاده کنید، در حالی که یک عنصر هستش و نه یک رشته.
https://www.w3schools.com/jsref/jsref_substring.asp

سبحان دادخواه
سبحان دادخواه
@SobhanDadkhah

تخصص: دانشجوی برنامه نویسی :)

با سلام. روشی که استفاده کردین به شما object پاراگراف انتخاب شده رو برمیگردونه. به این صورت به متن داخل پاراگرافتون دسترسی دارید:

    let originTextMatch=originText.innerHTML.substring ( '0' , textEntered.length);
مرضیه نکوزاد
مرضیه نکوزاد
@M.Nekoo Zad

سلام ممنون از پاسختون 🌹
من ناوارد هستم و تازه دوره جاواسکریپت رو شروع کردم ، استادی که فیلم هاشون رو نگاه میکنم مثل من از این تابع استفاده کرد و مشکلی در اجرای برنامه نداشت ، نمیدونم چرا برای من اجرا نمیشه
از روش شما هم استفاده کردم خوب بود ولی باز قسمت زیر رو اجرا نمیکنه قسمتی که با صحیح تایپ کردن باید کادر به رنگ سبز در بیاد
`
if(textEntered==originText){

    testWrapper.style.borderColor="green";
    clearInterval(interval);`
ابوالفضل رجائی نسب
ابوالفضل رجائی نسب
@abol313

تخصص: برنامه نویس (laravel-backend-php)

بِسْمِ اللَّهِ الرَّحْمَٰنِ الرَّحِيمِ
الْحَمْدُ لِلّٰه

سلام همون طور هم که اشاره شد، originText یک عنصر نمایشی (همون element داخل dom هست)
اون طور که من دیدم پروژه مورد نظر واسه سرعت آزمایی تایپ کردن هست...
خب یکی از چیزهایی که مد نظر هست اینه که اون متنی که کاربر می تایپه ( که برابر با textOrigin.innerText هست !) را بررسی میکنه اشتب کرده و درست تایپ کرده یا ....
خب پس اون textOrigin عنصره !
و برای دستیابی به متن عنصر نه خود عنصر باید از مشخصه ( property ) متنش که بهتره از innerText استفاده بشه :)

کد خروجی :


const theTimer = document.querySelector('.timer');
const testArea = document.querySelector(".text_input");
const originText = document.querySelector(".patern_origin");
const testWrapper = document.querySelector('.test_wrapper');

var timer=[0,0,0,0];
var timerRunning=false;
var interval;

function leadingTime(time){
    if(time<=9){
        time="0"+time;
    }
    return time;
}

function runTimer (){

    let currentTime = leadingTime(timer[0])+":"+leadingTime(timer[1])+":"+leadingTime(timer[2]);
    theTimer.innerHTML = currentTime;

    timer[3]++;

    timer[0]=Math.floor((timer[3]/100)/60);
    timer[1]=Math.floor(timer[3]/100)-(timer[0]*60);
    timer[2]=Math.floor(timer[3]-(timer[1]*100)-(timer[0]*6000));

}

function spellCheck(){
    let textEntered=testArea.value;

    // replace [textOrigin] to [textOrigin.innerHtml] as text content
    // ! wrong let originTextMatch=originText.substring ( '0' , textEntered.length);
    let originTextMatch=originText.innerText.substring ( '0' , textEntered.length);

    // replace [textOrigin] to [textOrigin.innerHtml] as text content
    // ! wrong if(textEntered==originText){
    if(textEntered==originText.innerText){

        testWrapper.style.borderColor="green";
        clearInterval(interval);

    }else{

        if(textEntered==originTextMatch){
            testWrapper.style.borderColor="yellow";

        }else{
            testWrapper.style.borderColor="red";
        }
    }
}

function start (){
    let textEnteredLength = testArea.value.length;

    if (textEnteredLength==0 && !timerRunning)
    {
        timerRunning=true;
        interval = setInterval(runTimer,10);
    }
}

 testArea.addEventListener("keypress", start);  
 testArea.addEventListener("keyup", spellCheck);
مرضیه نکوزاد
مرضیه نکوزاد
@M.Nekoo Zad

ممنون از لطفتون ، کامل و عالی 🙏

برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام