2015-03-25 6 views
1

Я застрял в проблеме, где я пытаюсь использовать addEventListener. Я пытался найти решения в Интернете, но я думаю, что мои знания ограничены, чтобы выбрать подходящий ответ.не может найти решение моей функции «addEventListener»

Что я пытался вызывать функцию «addFile()», когда ключ нажат в этом примере, введите (13), к сожалению, ничего не происходит. Я могу добавить атрибут onkeypress на вход «add-file» со слегка отредактированным addFileOnKeyEvent (event), но я пытаюсь понять, что не так с моим eventListener.

Надеюсь, вы могли бы следовать моим объяснениям, так как это мой первый вопрос. :)

function addFile() { 
 
    var x = document.getElementById("add-file").value; 
 
    x = x + ".xml"; 
 
    var lbl = document.createElement("label"); 
 
    var node = document.createTextNode(x); 
 
    lbl.appendChild(node); 
 

 
    var element = document.getElementById("appendable"); 
 
    element.appendChild(lbl); 
 
} 
 

 
function addFileOnKeyEvent(event) { 
 
    var evt = event.keyCode; 
 
    var textField = document.getElementById("add-file").addEventListener("keypress", function() { 
 
    if (evt == 13) { 
 
     addFile(); 
 
    } 
 
    }); 
 
}
<label>Dateien</label> 
 
<input id="add-file" type="text" onclick="this.select();"> 
 
<button type="submit" onclick="addFile()">Hinzufügen</button> 
 
<div class="data-display"> 
 
    <span id="appendable"></span> 
 
</div>

+0

Вы звоните 'addFileOnKeyEvent()' где-нибудь? Я не вижу этого в вашем предоставленном коде. – ken4z

+0

Передача 'event' внутри' addFileOnKeyEvent() 'не имеет большого смысла. Он должен находиться внутри функции обратного вызова addEventListener. – mohamedrias

ответ

1

На первом, addFileOnKeyEvent() никогда не вызывается, прежде чем где-либо. Поэтому вы должны называть это, когда пытаетесь добавить файл. Или вы должны привязать событие к текстовому полю по умолчанию.

Также не нужно передавать объект события addFileOnKeyEvent(). Событие должно быть записано в функции обратного вызова addEventListener.

function addFile() { 
 
    var x = document.getElementById("add-file").value; 
 
    x = x + ".xml"; 
 
    var lbl = document.createElement("label"); 
 
    var node = document.createTextNode(x); 
 
    lbl.appendChild(node); 
 

 
    var element = document.getElementById("appendable"); 
 
    element.appendChild(lbl); 
 
} 
 

 
function addFileOnKeyEvent() { 
 
    document.getElementById("add-file").addEventListener("keypress", function(event) { 
 
    var evt = event.keyCode; 
 
    if (evt == 13) { 
 
     addFile(); 
 
    } 
 
    }); 
 
} 
 
// call the function here 
 
addFileOnKeyEvent(); 
 

 
    // else just put the event handler part alone. The function is unnecessary here.
<label>Dateien</label> 
 
<input id="add-file" type="text" onclick="this.select();"> 
 
<button type="submit" onclick="addFile()">Hinzufügen</button> 
 
<div class="data-display"> 
 
    <span id="appendable"></span> 
 
</div>

+0

Это очень помогло мне, у меня было заблуждение, что, написав _function_ с eventListener, я приведу к своей цели. Как будто он будет ощущать магическое нажатие. –

1

Это не как работать события. Попробуйте это ...

document.getElementById("add-file").addEventListener(
    "keypress", 
    function(event) { 
     if (event.keyCode == 13) { 
      addFile(); 
     } 
    }); 

Вместо ...

function addFileOnKeyEvent(event) { 
    var evt = event.keyCode; 
    var textField = document.getElementById("add-file").addEventListener("keypress", function() { 
    if (evt == 13) { 
     addFile(); 
    } 
    }); 
} 
+0

Спасибо, ваш ответ также помог мне сократить мой код. –

Смежные вопросы