如何动态地为元素的onclick事件分配函数?

时间:2014-06-26 06:19:18

标签: javascript html onclick getelementbyid

与为每个元素的click事件设置单独的函数相反,我想迭代元素并根据id或其他任何内容进行分配?

document.getElementById('measure').onclick = function() { clickMe(1); };

我该如何处理?

1 个答案:

答案 0 :(得分:1)

在过去,我已经做了一些事情:

var setClickOnElements = function(selector) {
    $(selector).each(function() {
        $(this).click(function(event) {
            // behaviour on click
        });
    });
};

...其中selector是一个类选择器,例如.my-class。在传递给each的回调中,您可以获得所选元素的其他属性,例如id等。如果你将这个类添加到你想要设置click函数的元素并在加载时调用setClickOnElements('.my-class');,那么你应该好好去!

编辑:以上使用jQuery。如果您仅限于纯Javascript,则可以使用John Resig关于getElementByClass实施的帖子中描述的方法之一:http://ejohn.org/blog/getelementsbyclassname-speed-comparison/

这是一个例子(使用来自http://www.dustindiaz.com/getelementsbyclass的Dustin Diaz的方法):

var getElementsByClass = function(searchClass,node,tag) {
    var classElements = new Array();
    if ( node == null )
        node = document;
    if ( tag == null )
        tag = '*';
    var els = node.getElementsByTagName(tag);
    var elsLen = els.length;
    var pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)");
    for (i = 0, j = 0; i < elsLen; i++) {
        if ( pattern.test(els[i].className) ) {
            classElements[j] = els[i];
            j++;
        }
    }
    return classElements;
}

var setClickOnElements = function(className) {
    var elements = getElementsByClass(className);
    for (var i = 0; i < elements.length; i++) {
        var element = elements[i];
        element.onclick = function(event) {
            // click behaviour here
        };
    }
};