click()方法适用于链接,但不适用于Javascript中的按钮

时间:2015-09-02 09:58:36

标签: javascript

我编写了一个脚本,我通过开发工具运行 - > Chrome中的控制台自动添加注释,而不是一次编写和提交注释:

 /**
 * Created by keilc on 2/09/2015.
 */
var leaveComment = document.getElementsByClassName('plain leaveComment');
var commentBox = document.getElementsByClassName('botmarg5px feedbacktextarea');
var submit = document.getElementsByClassName('siteButton bigButton');
var comment = "thankyou very much :)";


for(var i = 0; i <= leaveComment.length; i++)
{
    // Click 'leave comment'
    leaveComment[i].click();

    // Leave comment
    commentBox[i].value = comment;

    // Submit the comment
    submit.click();
}

enter image description here

点击();成功调用leaveComment数组中每个项目的事件,但当它到达提交按钮时,click();方法失败并返回Object doesn't support property or method 'click'

enter image description here

所以我尝试在for循环之外的提交按钮上移动click();调用:

for(var i = 0; i <= leaveComment.length; i++)
{
   // Click 'leave comment'
   leaveComment[i].click();

   // Leave comment
   commentBox[i].value = comment;
}

// Submit the comment
    submit.click();

但这会给我Unable to get property 'click' of undefined or null reference错误。

在尝试了这些不同的方法之后,我很困惑为什么click();方法适用于“留言评论”链接而不是提交按钮。

2 个答案:

答案 0 :(得分:1)

getElementsByClassName()返回所有匹配元素的NodeList。

  

返回具有所有给定类名的所有子元素的类数组对象。在文档对象上调用时,将搜索完整文档,包括根节点。您也可以在任何元素上调用getElementsByClassName();它将仅返回具有给定类名的指定根元素的后代元素。

var submit = document.getElementsByClassName('siteButton bigButton');

如果您只有一个匹配类的按钮,请使用

submit[0].click();

如果你有多个元素,那么迭代它们

for(var i = 0; i < submit.length; i++) {
    submit[i].click();
}

答案 1 :(得分:0)

问题是submitNodeList,您需要像对leaveComment那样给出索引:

submit[i].click();