2016-06-14 19 views
0

Im Moment dieser Code funktioniert perfekt für mich:JavaScript AddEventListener Ausnahmen

function click(event){ 
    var header = document.getElementById('header'); 
    var text = document.createElement('textarea'); 
    text.multiline = true; 
    text.cols = 30; 
    text.rows = 6; 
    text.style.cssText = "position: absolute; margin-left:" + event.clientX + "px; margin-top:" + (event.clientY - 50) + "px;"; 
    header.parentNode.insertBefore(text, header.nextSibling); 
} 
document.addEventListener("click", click); 

Aber ich frage mich, wenn Sie es von der Aktivierung stoppen können, wenn Sie auf den Textbereich klicken.

Antwort

4

Testen Sie die target-node mit event.target.nodeName

function click(event) { 
 
    if (event.target.nodeName.toUpperCase() !== 'TEXTAREA') { 
 
    var header = document.getElementById('header'); 
 
    var text = document.createElement('textarea'); 
 
    text.multiline = true; 
 
    text.cols = 30; 
 
    text.rows = 6; 
 
    text.style.cssText = "position: absolute; margin-left:" + event.clientX + "px; margin-top:" + (event.clientY - 50) + "px;"; 
 
    header.parentNode.insertBefore(text, header.nextSibling); 
 
    } 
 
} 
 
document.addEventListener("click", click);
<header id='header'>Header</header>

+2

Im unwahrscheinlichen Fall, dass jemand richtig XHTML verwendet, werde ich beachten Sie, dass der Knotenname in Kleinbuchstaben sein. In den allermeisten Fällen, in denen Menschen HTML verwenden oder XHTML falsch verwenden, wird es in Großbuchstaben geschrieben. Ich bin also immer paranoid: 'event.target.nodeName.toUpperCase()! == 'TEXTAREA''. –

+0

@ T.J.Crowder, aktualisiert! Geht es um IE9 und IE9? – Rayon

+1

Nein, weil in XHTML der Name des Elements 'textarea' ist und XHTML die Groß- und Kleinschreibung unterscheidet (weil es XML ist). Bei HTML wird nicht zwischen Groß- und Kleinschreibung unterschieden, und Elementnamen werden auf Großbuchstaben normalisiert, aber XHTML ist ein anderes Biest. –

Verwandte Themen