Глобальная функция Onclick с локальным параметром - PullRequest
1 голос
/ 30 мая 2019

Продолжение после вопроса о порядке функций XHR Это рекурсивная ситуация, когда sendRequest () создает поле с ссылкой на себя.Эта ссылка для клика содержит переменное слово, которое должно быть передано sendRequest при вызове.

<script type="text/javascript">
function inputReq(){
    sendRequest(wordform.word.value)
}
function sendRequest(str){
    //we start by removing the now superfluous rows
    table=document.getElementById('table')
    while(table.rows.length>2){
        table.deleteRow(2);
    }
    var request = new XMLHttpRequest();
    console.log('sending request');
    request.open('GET', 'http://127.0.0.1:5000/api.html?query='+str, true);
    request.onreadystatechange = function() {
        if (request.readyState == 4) {
            json=request.responseText;
            console.log(json);
            //json.forEach(function(obj) { 
            //});
            for (word in json){
                var row=table.insertRow();
                var scoreC=row.insertCell();
                var wordC=row.insertCell();
                scoreC.innerHTML=json[word];
                wordC.innerHTML=word;
                wordC.onclick=(function(i)  {sendRequest(i);})(word);
            }
        } else {
            console.log("Silence on the line");
        }
    }
    request.send();
}
</script>
<!DOCTYPE html>
<html>
<head>
<title>Query Page</title>
</head>
<body>
<h1>Query Page</h1>

<table id='table' style="width:100%">
<tr><form name='wordform'>
    <th>Concept: <input type="text" name="word"></th>
    <th><input type="button" onclick="inputReq()" value='Find Associations'></th>
</form></tr>
</body>
</html>

Ответ XHR выглядит следующим образом:

{"milk": 1, "cheese": 3, "bread": 2}

Я следил этосхема но эта строка вызывает функцию вместо добавления ссылки onclick:

wordC.onclick=(function(i)  {sendRequest(i);})(word);

1 Ответ

1 голос
/ 30 мая 2019

Поскольку это IIFE (выражение для немедленного вызова функции), оно вызывается мгновенно.Поместите другую функцию вокруг него.

wordC.onclick = () => (function(i) { sendRequest(i); })(word);

(Выше не похоже, что у него есть окружающая функция, но у него есть - это функция стрелки ES6).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...