【问题标题】:submit form from file input box after selecting image选择图片后从文件输入框提交表单
【发布时间】:2021-11-09 23:06:06
【问题描述】:

我正在尝试从输入 [type=file] 对话框窗口触发表单提交。我正在尝试简化选择图像的过程,然后必须单击另一个按钮才能将表单提交到数据库。

我已更新问题以包含下面的屏幕截图和代码,希望能更清楚地说明我遇到的问题。

注意: 有人问我为什么不向输入按钮添加 id,但我不能,因为文件输入是从函数调用的,并且由于它是 Windows 进程,所以我无法添加/更改它。

这里有一些代码/图片可以更好地说明问题。

1 - 用户单击更改图片按钮以更新他们的个人资料图片。此按钮运行简码 [upload-user-profile-avatar]。

2 - 短代码触发标准输入文件打开框窗口。

3 - 用户双击文件或单击文件并按下打开按钮后,将自动提交用户个人资料头像插件的表单。

尝试: 我最初开始使用 jQuery 来尝试附加到表单并在点击时提交,

    jQuery('input[type=file]').change(function(){
        nameOfForm.submit();
    });

但是我在 SO 帖子中读到其他人正在尝试类似的事情,而 jQuery 不会提交表单,所以他们不得不切换到 javascript,我这样做了(因为 jQuery 没有提交表单).. .我想出这个是为了测试。

var form = document.getElementsByClassName("update-user-profile-avatar");
var inputs = document.getElementsByTagName('input');

for(var i = 0; i < inputs.length; i++) {
    if(inputs[i].type.toLowerCase() == 'file') {
        console.log(inputs[i].value);
        form.submit();
    }
}

所以这很有帮助,我可以看到打开的对话框窗口正在获取正确的文件名,但仍然没有提交表单,并且我在控制台中收到 form.submit() is not a function 错误。

然后我读到 html 表单提交可能有很多奇怪之处,所以尝试一下这些思路。

jQuery('input[type=file]').change(function(){ 
    for(var i = 0; i < inputs.length; i++) {
        if(inputs[i].type.toLowerCase() == 'file') {
            console.log(inputs[i].value);
            HTMLFormElement.prototype.submit.call(form);
        }
    }
});

产生了这个错误:

'submit' called on an object that does not implement interface HTMLFormElement.

所以我想我在这里旋转我的轮子。我觉得这是可行的,只是我没有使用正确的方法。

【问题讨论】:

    标签: html jquery wordpress forms file-upload


    【解决方案1】:

    我认为您正在寻找change 事件:

    Demo

    $('input[type=file]').change(function(){
       $('form').submit()
    })
    

    不幸的是,出于安全考虑,浏览器不允许您访问打开的窗口。但是使用.change() 方法,一旦输入的值发生变化,它将触发您想要的任何功能。无论他们是双击一个文件来选择它,还是点击文件和“打开”按钮。

    【讨论】:

    • 啊,好吧,有道理。我会试一试并报告。感谢您的建议!
    • 不幸的是,这不起作用。我已经玩过代码,并且可以使用这种方法更接近一点。 var form = document.getElementsByClassName("update-user-profile-avatar"); var 输入 = document.getElementsByTagName('input'); for(var i = 0; i
    • 不要在每个输入上使用循环来查找文件类型,而是尝试为您的文件输入提供一个 ID,然后使用 document.getElementById()。看起来你甚至没有使用 jQuery,但是你在 jQuery 中标记了它。如果您可以将所有代码放在原始问题中以便我查看,我很乐意为您提供帮助。
    • 我已经更新了这个问题,包括我对 jQuery 和 javascript 的实验(这就是我将其标记为 jQuery 的原因),因为两者都没有让我找到解决方案。我希望它更清楚,非常感谢您的帮助! :)
    猜你喜欢
    • 2017-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-30
    • 1970-01-01
    • 2012-02-28
    • 1970-01-01
    相关资源
    最近更新 更多