使用javascript手动更改表单/ textarea输入并确保触发所有事件侦听器

时间:2013-11-23 15:51:16

标签: javascript html dom

处理我需要在各种随机网站上手动填写输入字段和textareas的项目。到目前为止,我一直在做“element.value ='新值'”和“element.innerHTML ='新值'”,但是对于某些网站来说,似乎有些事件监听器在我这样做时没有被调用。

所以我认为我最好手动调用它们,并添加“element.onchange()”和其他一些(onkeypress,onkeydown,onkeyup),并尝试将元素传入函数“element.onchange (元件)”。但这些似乎都不适用于许多网站。

例如,转到http://www.facebook.com(已注销)并运行:

javascript:var elements = document.getElementsByClassName('inputtext'); for(var i = 0; i < elements.length; i++) { var element = elements[i]; element.value = 'New Test Value'; element.innerHTML = 'New Test Value'; element.onkeypress; };

您应该看到所有输入框都将值更改为“新测试值”,但占位符文本仍然存在(属于不同的元素)。当您手动单击页面上的输入框时,会调用一些函数,如果框中有文本,则会删除此函数。

那么我如何确保连接到元素的任何事件监听器总是被调用,就像我们手动更改值时一样?

1 个答案:

答案 0 :(得分:2)

希望这有帮助

 var isCreatEvent = "createEvent" in document, 
     allEles = document.querySelectorAll('input'); // collect required elements.

 for(var i = 0; i < allEles.length; i++){
  var element = allEles[i];
  element.onchange();
  if (isCreatEvent) {
    var evt = document.createEvent("HTMLEvents");
    evt.initEvent("change", false, true);
    element.dispatchEvent(evt);
  }
  else
    element.fireEvent("onchange");
 }