Apabila mentakrifkan fungsi JavaScript dengan nama yang sama dengan ID elemen, ralat yang tidak dijangka boleh berlaku. Artikel ini menyiasat sebab asas konflik ini dan meneroka sebarang spesifikasi atau sekatan JavaScript berkenaan situasi sedemikian.
JavaScript mempunyai isu rantaian skop warisan yang berpunca daripada versi awalnya (1.0 hingga 1.3 ). Dalam nilai atribut pengendali peristiwa bagi kawalan borang yang merupakan sebahagian daripada borang, objek Borang yang mewakili borang boleh diakses sebagai objek kedua seterusnya dalam rantaian skop, manakala objek kawalan borang itu sendiri ialah objek kedua seterusnya.
Objek Borang mempunyai sifat yang mewakili nama kawalan borang yang terkandung di dalamnya. Ini membenarkan mengakses objek kawalan borang menggunakan sintaks berikut:
myForm.border
Ini ialah singkatan untuk sintaks yang mematuhi piawaian:
document.forms["myForm"].elements["border"]
Akibatnya, apabila menggunakan kawalan borang nama dalam nilai atribut pengendali acara, ia bersamaan dengan merujuk sifat sepadan objek Borang. Jika nama kawalan borang ini sepadan dengan fungsi yang ditentukan pengguna, ia membawa kepada pelaksanaan objek kawalan borang, yang tidak boleh dipanggil. Ini menyebabkan ralat "TypeError: [function name] is not a function."
DOM Tahap 2 Spesifikasi HTML, yang menyeragamkan pelaksanaan DOM sedia ada, memperkenalkan tambahan ciri. Ia menyatakan bahawa item HTMLCollections boleh diakses sama ada dengan nama atau ID menggunakan sintaks pengakses sifat kurungan [...].
Dalam konteks borang dan kawalan borang, ini melanjutkan kaedah akses untuk memasukkan elemen dengan ID juga. Akibatnya, konflik yang disebutkan di atas menjadi terpakai kepada elemen dengan ID, mengakibatkan ralat yang sama apabila nama fungsi bercanggah dengan ID elemen.
Memahami isu warisan ini memerlukan pengetahuan tentang evolusi sejarah JavaScript dan pengaruhnya pada API DOM. Mematuhi amalan terbaik, seperti mengelakkan konflik penamaan antara kawalan borang dan fungsi atau menggunakan ID, boleh mengurangkan isu ini dan mengelakkan ralat yang tidak dijangka.
Atas ialah kandungan terperinci Mengapa Nama Fungsi JavaScript Bertembung dengan ID Elemen Menyebabkan Ralat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!