如何用 JavaScript 获取论坛、博客等不同网站光标所在的 form 元素调用 submit()

2020-06-10 13:06:54 +08:00
 soooulp

想通过 JavaScript,获取论坛、博客等不同网站光标所在当前 form,调用 submit() ,执行 input 或者 textarea 输入框为 type="submit"的提交,不再点按钮和按 enter

现在没办法识别不同网站光标所在的 input 或 textarea 的 form 元素

尝试了下面的方法,就百度的有效果,论坛按 ctrl+enter 不能提交的 textarea 输入框没效果,再有些论坛不能确定回复文本框的序号,会执行搜索输入框,即第一个 form
不同网站 form 的 name 不一样,也不能通过 form[name]调用

document.forms[0].submit()

尝试了用下面的方法,没有效果

this.submit()
937 次点击
所在节点    问与答
6 条回复
autoxbc
2020-06-10 13:16:06 +08:00
soooulp
2020-06-10 13:43:37 +08:00
@autoxbc 谢谢大佬回复,document.activeElement 可以获取当前 DOM 的元素,可是无法调用 submit 提交呀,是不是只有 form 可以调用
autoxbc
2020-06-10 14:33:54 +08:00
HTMLFormElement.prototype.submit
submit 是 form 原型对象上的方法,只有 form 实例才可以 submit,因为 submit 需要的地址 action 在 form 上,单独的 input 去 submit 本身也不合逻辑

HTMLInputElement.prototype.form
input 原型对象上有 getter 属性 form,指向 input 所属 form,所以按照题目的意思,可以 input.form.submit()
autoxbc
2020-06-10 14:36:36 +08:00
HTMLTextAreaElement.prototype.form
textarea 也有这个属性
soooulp
2020-06-10 15:44:40 +08:00
解决了,csdn 大佬给有个遍历节点元素的方法

```
function getParentFormByChild(ele){
while(ele.parentNode.tagName.toLowerCase() !== 'body' && ele.parentNode.tagName.toLowerCase() !== 'form'){
ele = ele.parentNode
}
if(ele.parentNode.tagName.toLowerCase() === 'body' ) return null
return ele.parentNode
}

function 油猴子点击图标事件(){
let ele = "油猴子获取当前光标所在 input 的 dom 元素"
let fromEle = getParentFormByChild(ele)
if(fromEle) fromEle.submit()
}
```
soooulp
2020-06-10 15:46:00 +08:00
@autoxbc 再次谢谢传授

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/680312

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX