未定义 JS 查询

JS query not defined

所以我一直在通过 Whosebug 寻找类似的问题/答案,但一无所获,所以我打开了这个新问题,希望有人能帮助我。基本上我有一个 HTML 页面和一个 Javascript 页面。除此特定功能外,所有其他功能均正常工作。我认为问题与重新加载 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"> 时,函数应该 运行 正常,但事实并非如此。如果有人能帮助我,那就太好了。

您在侦听器函数中定义查询函数。所以它在这个函数的范围之外是不可见的。如果你想直接调用该方法'from the button',那么你必须将它附加到window。您可以添加

window.query = query;

查询函数声明后的语句。

虽然安德烈亚斯的回答是正确的,但我想添加一个备选方案

您可以直接在您的 JS 文件中绑定点击,而不是 HTML

喜欢

document.getElementById('advanced_search').addEventListener("click", query);