Чистый javascript эквивалент jquery click()?
Я создаю небольшое приложение, которое захватывает щелчки мыши. Я написал прототип в jquery, но, поскольку это небольшое приложение, ориентированное на скорость, вложение jquery для использования только одной функции было бы излишним.
Я попытался адаптировать этот пример из JavascriptKit:
document.getElementById("alphanumeric").onkeypress=function(e){
//blah..blah..blah..
}
но это не сработало, когда я попробовал
document.getElementsByTagName("x").onclick
Что я делаю неправильно?
Ответы
Ответ 1
Скажите, что у вас есть список тэгов, которые вы хотели бы захватить для тега p:
var p = document.getElementsByTagName("p");
for(var i=0; i<p.length; i++){
p[i].onclick = function(){
alert("p is clicked and the id is " + this.id);
}
}
Посмотрите пример здесь для большей ясности:
http://jsbin.com/onaci/
Ответ 2
В вашем примере вы используете getElementsByTagName, которое возвращает вам массив элементов DOM, вы можете перебрать этот массив и назначить обработчик onclick каждому элементу, например:
var clickHandler = function(){
alert('clicked!');
}
var elements = document.getElementsByTagName('div'); // All divs
for(var i = 0; i<elements.length; i++){
elements[i].onclick = clickHandler;
}
Ответ 3
это выглядит немного похоже на то, что вы пропускаете больше, чем просто функцию jQuery. Вы также пропустите механизм выбора jquery, цепочку и автоматическую итерацию в коллекциях объектов. С меньшими усилиями вы можете минимально воспроизвести некоторые из этих вещей.
var myClickCapture = function (selector) {
var method, name,iterator;
if(selector.substr(0,1) === "#") {
method = "getElementById";
name = selector.substr(1);
iterator = function(fn) { fn(document[method](name)); };
} else {
method = "getElementsByTagName";
name = selector;
iterator = function(fn) {
var i,c = document[method](name);
for(i=0;i<c.length;i++){
fn(c[i]);
};
};
myClickCapture.click = function (fn){
iterator(function(e){
e.onclick=fn;
})
}
return myClickCapture;
}
Я не тестировал код, но, теоретически, он получает что-то вроде этого:
myClickCapture("x").click(function(e){ alert("element clicked") });
Надеюсь, это даст вам представление о том, что делает jQuery под обложками.
Ответ 4
document.getElementsByTagName("x")
возвращает массив элементов, имеющих тэг 'x'.
Для каждого элемента в возвращаемом массиве вы должны выбрать подходящее событие.