V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
soooulp
V2EX  ›  问与答

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

  •  
  •   soooulp · Jun 10, 2020 · 1432 views
    This topic created in 2156 days ago, the information mentioned may be changed or developed.

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

    如果不能用 JavaScript 直接实现,暂时考虑对指定的网站,查 form 的 name,来获取元素
    6 replies    2020-06-10 15:46:00 +08:00
    autoxbc
        1
    autoxbc  
       Jun 10, 2020
    soooulp
        2
    soooulp  
    OP
       Jun 10, 2020
    @autoxbc 谢谢大佬回复,document.activeElement 可以获取当前 DOM 的元素,可是无法调用 submit 提交呀,是不是只有 form 可以调用
    autoxbc
        3
    autoxbc  
       Jun 10, 2020
    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  
       Jun 10, 2020
    HTMLTextAreaElement.prototype.form
    textarea 也有这个属性
    soooulp
        5
    soooulp  
    OP
       Jun 10, 2020
    解决了,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
       Jun 10, 2020
    @autoxbc 再次谢谢传授
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   6321 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 44ms · UTC 02:39 · PVG 10:39 · LAX 19:39 · JFK 22:39
    ♥ Do have faith in what you're doing.