繁体   English   中英

javascript在事件监听器中更改html

[英]javascript change html in event listener

我开始尝试构建Chrome扩展程序(也首次接触HTML和Javascript),并陷入了一项基本任务。 我有popup.html文件,这是用户看到的。 我想做的是有一些占位符文本最初显示给用户。 弹出窗口还将具有一个按钮,以便当用户单击该按钮时,占位符文本将替换为其他内容。

这是我测试的内容:

popup.html:

<!doctype html>
<html>
  <head>
    <title>Test Extension</title>
    <script src="popup.js"></script>
  </head>
  <body>
      <form id="testForm">
          <input id="testButton" type="submit" value="testButton" />
      </form>
      <h3 id="textHeader">This will change.</h3>
  </body>
</html>

popup.js:

function changeText() {
    document.getElementById('textHeader').innerHTML = 'Changed!';
}

document.addEventListener('DOMContentLoaded', function () {
  document.getElementById('testForm').addEventListener('submit', changeText);
});

当我调试脚本时,我看到了初始的addEventListener调用,该调用调用changeText并使弹出窗口中的文本更改为“ Changed!”。 但是,我然后看到第二次调用addEventListener,然后将其恢复为原始的popup.html表单。 最终结果是“已更改!” 仅短暂出现。

有没有一种方法可以永久更改事件侦听器中的HTML文件以获得预期的行为? 我意识到我确实需要了解DOM模型以及Javascript如何在浏览器中与之交互。 我正在寻找一本书或其他参考资料(Mozilla开发人员网络站点看起来像是一个权威的资料,但是似乎很少),但是与此同时,希望通过此工作至少能获得一些额外的理解。简单的例子。 谢谢!


编辑:

谢谢大家的及时答复! 禁用表单提交是有意义的。 我将此编辑添加到我的问题中,因为实际上我要实现的原始任务确实需要使用表单。

我要做的是通过表单从用户那里输入输入,查询外部站点(例如Wikipedia)以输入用户输入的短语,然后在从查询中获取的弹出内容中显示。

这是我尝试过的基本概述:

popup.html:

<!doctype html>
<html>
    <head>
        <title>Test Extension</title>
        <script src="popup.js"></script>
    </head>

    <body>
        <form id="WikipediaForm">
            <input type="text" id="userQuery" size="50"/>
            <input id="submitQuery" type="submit" value="Ask Wikipedia" />
        </form>
        <h3 id="WikipediaResponse">placeholder</h3>
    </body>

</html>

popup.js:

function changeText() {    
var req = new XMLHttpRequest();
askURL = 'http://en.wikipedia.org/wiki' + encodeURIComponent(document.getElementById('userQuery').value);
req.open("GET", askURL, false);

req.onload = function (e) {
    if (req.readyState === 4) {
        if (req.status === 200) {
                document.getElementById('WikipediaResponse').innerHTML = req.responseText; // i'm just dumping everything for now
            }
        } else {
            console.error(req.statusText);
        }
    }
};
req.send(null);
}

document.addEventListener('DOMContentLoaded', function () {
  document.getElementById('WikipediaForm').addEventListener('submit', changeText);
});

这又遇到了与上一个示例相同的问题,在该示例中,响应会闪烁一会儿,然后再返回到占位符文本。 但是,由于我需要提交表单,因此我现在无法遵循先前的答案。 在表单的事件侦听器中更改内容的常用方法是什么?

另一方面,我正在使用同步XMLHttpRequest调用,我知道不建议这样做。 但是,当我使用异步调用时,它似乎没有通过,而且我不知道如何解决该问题,所以这也是我正在研究的另一个问题。

采用:

function changeText() {
    document.getElementById('textHeader').innerHTML = 'Changed!';
    //Returning false will prevent that the form submission completes
    return false;
}

但是,如果您的表单永远不会在任何地方发送数据,则根本不需要表单(除非您要对字段使用重置按钮)。 因此,您只需将type="button"添加到您的元素即可。

<body>
      <input id="testButton" type="button" value="testButton" />
      <h3 id="textHeader">This will change.</h3>
</body>

您需要从事件处理程序中返回false ,以防止在处理程序运行后正常提交表单:

function changeText() {
    document.getElementById('textHeader').innerHTML = 'Changed!';
    return false;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM