JS запрос не определен - PullRequest
0 голосов
/ 26 мая 2020

Итак, я просматривал stackoverflow на предмет похожих проблем / ответов и ничего не получил, поэтому я открыл этот новый вопрос в надежде, что кто-то может мне помочь. В основном у меня есть страница HTML и страница Javascript. Все остальные функции работают, кроме указанной c одной. Я думаю, что проблема связана с перезагрузкой DOM, но я не могу понять проблему. У меня есть это на моем HTML:

<button id="advanced_search" onclick="query()">Advanced Search</button>

И у меня это на моем скрипте:

document.addEventListener("DOMContentLoaded", function(e)
{
....
....
....
 // V Everything inside here is fine, if I put this in the html page inside 
 // V a <script></script> it works fine.
 function query() {
      ...
      ...
      ...
    if(add_and != 0){
    //Im using cypher to query my neo4j database.
        queryStr = "match (n)-[r]->(m) where " + add_and.join(" ")+ " return 
        n,r,m";
    } else {
        queryStr = 'match (n)-[r]->(m) return n,r,m';
    }  
 }

 // side problem: the queryStr doesn't change from function query to var jqxhr
 var jqxhr = $.post(neo4jAPIURL, '{"statements":[{"statement":"' + queryStr + '", "resultDataContents":["graph"]}]}', 
function(data) {
 ...
 ... // some d3.js stuff inside
 ...
 }

Моя проблема в том, что он говорит, что функция query () не определена в HTMLButtonElement.onclick, хотя я вызываю функцию:

<script src="/scripts/force_directed_layout.js"></script> 

Ожидаемый результат - когда я нажимаю <button id="advanced_search">, функция должна работать нормально, но это не так. Было бы замечательно, если бы кто-нибудь мог мне помочь.

Ответы [ 2 ]

2 голосов
/ 26 мая 2020

Хотя ответ Андреаса правильный, я хотел бы добавить альтернативу

Вы можете привязать щелчок прямо в своем JS файле вместо HTML

, например

document.getElementById('advanced_search').addEventListener("click", query);
2 голосов
/ 26 мая 2020

Вы определяете функцию запроса внутри функции слушателя. Таким образом, он не виден за пределами этой функции. Если вы хотите вызвать метод прямо «из кнопки», вам необходимо прикрепить его к window. Вы можете добавить оператор

window.query = query;

после объявления функции запроса.

...