2011-01-10 62 views
1

我写了一个小脚本(忽略了我在FaceBook上获得的数百个愚蠢请求)。如何模拟jQuery的触发器()?

var inputs = document 
       .getElementById('contentArea') 
       .getElementsByTagName('input'); 

for (var i = 0, inputsLength = inputs.length; i < inputsLength; i++) { 

    if (inputs[i].value !== 'Ignore') { 
     continue; 
    } 

    // What I would do with jQuery, if inputs[i] was a jQuery object. 
    inputs[i].click(); 

} 

所以基本上我想调用所有这些忽略按钮上的click事件,让FaceBook的AJAX完成剩下的工作。

如何在没有jQuery的情况下模拟点击?我已经谷歌搜索,但没有找到答案。

回答

1

.click() is a method of HTMLInputElements in Firefox(不知道是否在其他浏览器太)。

的另一种方式,应该在其他浏览器中工作过,使用document.createEvent

var inputs = document 
       .getElementById('contentArea') 
       .getElementsByTagName('input'); 

for (var i = 0, inputsLength = inputs.length; i < inputsLength; i++) { 

    if (inputs[i].value !== 'Ignore') { 
     continue; 
    } 
    // maybe it is enough to create it only once before the the loop, don't know 
    var evt = document.createEvent("MouseEvents"); 
    evt.initMouseEvent("click", true, true, window, 
     0, 0, 0, 0, 0, false, false, false, false, 0, null); 
    inputs[i].dispatchEvent(evt); 

} 

当然人会在功能封装这使其可重复使用;)

+0

+1,和我当我学到一些东西(`document.createEvent()`)时,它将被接受。在这种情况下,我不会封装它,因为我直接在控制台中运行它,只有一次=}。感谢您的回答。 – alex 2011-01-10 02:03:48

1

我刚刚试过上面的代码(使用click()),它在我的Firefox中工作。

所以我想答案是,这样做就像jQuery

最后的代码是...

var inputs = document 
      .getElementById('contentArea') 
      .getElementsByTagName('input'); 

for (var i = 0, inputsLength = inputs.length; i < inputsLength; i++) { 

    if (inputs[i].name !== 'actions[reject]') { 
     continue; 
    } 

    inputs[i].click(); 

}