cari

Rumah  >  Soal Jawab  >  teks badan

Penulisan semula tajuk: Fungsi ini dipanggil oleh addEventListener tanpa permintaan eksplisit saya

Jadi kami mempunyai halaman:

<span id='container'>
    <a href='#' id='first'>First Link</a>
    <a href='#' id='second'>Second Link</a>
</span>

Dan ingin menambah beberapa acara klik:

first.addEventLis tener('click', function(){alert('sup!');})

Berfungsi seperti daya tarikan! Tetapi apabila anda menetapkan hujah kedua kepada fungsi luaran:

function message_me(m_text){
    alert(m_text)
}

second.addEventLis tener('click', message_me('shazam'))

Ia memanggil fungsi dengan segera. Bagaimana saya boleh menghentikan ini? Sangat menjengkelkan!

Ini ialah demo langsung: http://jsfiddle.net/ey7pB/1/

P粉477369269P粉477369269395 hari yang lalu561

membalas semua(2)saya akan balas

  • P粉258083432

    P粉2580834322023-10-19 17:48:17

    Memandangkan hujah kedua memerlukan fungsi rujukan , anda perlu menyediakannya. Dengan kod yang dipersoalkan, anda akan segera memanggil fungsi dan lulus hasilnya (iaitu 未定义...kerana semua fungsi yang dilakukan ialah beritahu dan tidak mengembalikan apa-apa). Sama ada panggil fungsi dalam fungsi tanpa nama (seperti contoh pertama anda) atau tukar fungsi untuk mengembalikan fungsi.

    Anda boleh melakukan ini:

    function message_me(m_text){
        alert(m_text);
    }
    
    second.addEventListener('click', function () {
        message_me('shazam')
    });

    Atau ini:

    function message_me(m_text){
        return function () {
            alert(m_text);
        };
    }
    
    second.addEventListener('click', message_me('shazam'));

    Demo: http://jsfiddle.net/tcCvw/

    balas
    0
  • P粉773659687

    P粉7736596872023-10-19 12:06:48

    Memetik jawapan Ian :

    function message_me(m_text){
        alert(m_text)
    } 
    
    second.addEventListener('click', 
        function() {
            message_me('shazam');
        }
    );

    Ini adalah fiddle yang dikemas kini.

    balas
    0
  • Batalbalas