مرضیه نکوزاد
2 سال پیش توسط مرضیه نکوزاد مطرح شد
8 پاسخ

خطای type error

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


ثبت پرسش جدید
علی محمودی
تخصص : Web Developer
@alimahmoudidev 2 سال پیش مطرح شد
0

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


Banana Life
@shift.delete 2 سال پیش آپدیت شد
0

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

let originTextMatch = originText.toString().substring ( '0' , textEntered.length);

مرضیه نکوزاد
@M.Nekoo Zad 2 سال پیش مطرح شد
0

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


میلاد-م
تخصص : توسعه‌دهنده رابط کاربری - Fron...
@milad 2 سال پیش مطرح شد
1

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


سبحان دادخواه
تخصص : دانشجوی برنامه نویسی :)
@SobhanDadkhah 2 سال پیش مطرح شد
1

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

    let originTextMatch=originText.innerHTML.substring ( '0' , textEntered.length);

مرضیه نکوزاد
@M.Nekoo Zad 2 سال پیش مطرح شد
0

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

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

علی محمودی
تخصص : Web Developer
@alimahmoudidev 2 سال پیش مطرح شد
0

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


ابوالفضل رجائی نسب
تخصص : برنامه نویس (laravel-backend-p...
@abol313 2 سال پیش مطرح شد
0

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

سلام همون طور هم که اشاره شد، 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 2 سال پیش مطرح شد
0

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


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

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