如何为ajax和addeventlistener/pushstate函数定义一个变量? Javascript,不是 jQuery

How to define a variable for ajax, and addeventlistener/pushstate function? Javascript, not jQuery

我正在尝试整理控制台消息:'Var foo is undefined'。 定义变量 foo,给我控制台消息:Anonomyous function。 这两个在行上是冲突的:foo.addeventlistener。 任何对此的帮助将不胜感激,我已经观看了 javascript 教程,到目前为止已经多次,并且搜索了很长时间,但找不到要做什么。

我知道我可以将 foo 定义为我想要的任何东西,但是它应该是什么才能使我的 addevent 函数不是匿名的? 还是我需要在此代码中进行其他类型的调整?

var foo = document.getElementsByTagName("li");
function Food(url) {
    var xmlhttp;
    if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp = new XMLHttpRequest();
    } else { // code for IE6, IE5
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.onreadystatechange = function () {
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
            document.getElementById('text').innerHTML = xmlhttp.responseText;
            history.pushState({}, 'foo', url);
        }
    }
    xmlhttp.open("GET", url, true);
    xmlhttp.send();

}

foo.addEventListener('click', function (e) {
    e.preventDefault();
    Food(this.href);
    return false;
}, true);

我不太清楚如何处理这个问题,任何帮助将不胜感激。

给定的 fiddle 根本没有函数 foo 但据我了解你的问题

var foo = document.getElementsByTagName("li");

foo 是一个 HTMLCollection object,它没有名为 addEventListener 的方法,因此会抛出错误。

您可能应该做的是遍历集合并绑定事件监听器。

例如。

[].slice.call(foo, 0).forEach(function (el) {
    el.addEventListener('click', function (e) {
        e.preventDefault();
        Mat(this.href); // note:: el is li element, not <a> tag
        return false;
    }, false);
});

或者最优雅的方式是将事件委托给一个静态公共父元素

var nav = document.getElementById('cssmenu'); // ensures only one element
nav.addEventListener('click', function (e) {
    var target = e.target;
    // simulate bubbling until captures the required tag
    while (target && target !== this && target.nodeName !== 'A') {
        target = target.parentElement;
    }
    e.preventDefault();
    Mat(target.href);
});

希望对您有所帮助