如何在不按下按钮的情况下立即执行代码?

mko*_*mko 0 javascript

我制作了一个非常简单的Ajax测试代码片段:

<!DOCTYPE html>
<html>
    <head>
        <script src='main.js'></script>
    </head>
    <body>
        <button id='get-content'>Click</button>
        <p></p>
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

main.js

(function(){
    window.addEventListener('load', function(){
        var xml_request = new XMLHttpRequest();
        xml_request.open('GET', '/test.txt', true);
        xml_request.addEventListener('readystatechange', change_content);
        var button_element = document.getElementById('get-content'); 
        button_element.addEventListener('click', fireup(xml_request));
        function fireup(xml_request) {
            xml_request.send();
        }
        function change_content(){
            if (xml_request.readyState == 4 && xml_request.status == 200) {
                document.getElementsByTagName('p')[0].textContent = xml_request.responseText;
            };  
        };
    });
})();
Run Code Online (Sandbox Code Playgroud)

它工作,但除了,ajax请求发送和更改p标签,没有我按下按钮,任何想法?

lan*_*nzz 5

button_element.addEventListener('click', fireup(xml_request));
Run Code Online (Sandbox Code Playgroud)

在这一行中,您调用 fireup(xml_request)并分配它返回的任何内容(无)作为click事件的侦听器.你可能想要这样的东西:

button_element.addEventListener('click', fireup);
function fireup() { ...
Run Code Online (Sandbox Code Playgroud)

由于xml_request是在fireup函数范围内,因此您无需将其作为参数传递.

  • @yozloy因为你正在_calling_函数.`fireup`和`fireup()`之间有很大的不同 (3认同)