V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
soooulp
V2EX  ›  问与答

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

  •  
  •   soooulp · 2020-06-10 13:06:54 +08:00 · 944 次点击
    这是一个创建于 1629 天前的主题,其中的信息可能已经有所发展或是发生改变。

    想通过 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()
    
    第 1 条附言  ·  2020-06-10 14:03:11 +08:00
    用了一个油猴子脚本,鼠标在 input 或者 textarea 元素里面,点击的时候弹出图标栏(类似划词翻译搜索的那种图标栏),设置点击图标后,执行 submit()

    如果不能用 JavaScript 直接实现,暂时考虑对指定的网站,查 form 的 name,来获取元素
    6 条回复    2020-06-10 15:46:00 +08:00
    autoxbc
        1
    autoxbc  
       2020-06-10 13:16:06 +08:00
    soooulp
        2
    soooulp  
    OP
       2020-06-10 13:43:37 +08:00
    @autoxbc 谢谢大佬回复,document.activeElement 可以获取当前 DOM 的元素,可是无法调用 submit 提交呀,是不是只有 form 可以调用
    autoxbc
        3
    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
        4
    autoxbc  
       2020-06-10 14:36:36 +08:00
    HTMLTextAreaElement.prototype.form
    textarea 也有这个属性
    soooulp
        5
    soooulp  
    OP
       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
        6
    soooulp  
    OP
       2020-06-10 15:46:00 +08:00
    @autoxbc 再次谢谢传授
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3013 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 14:49 · PVG 22:49 · LAX 06:49 · JFK 09:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.