input type="file"上的点击事件触发无效。

3

/注意:此仅适用于指定的域名,但实际上可行/

我一直在尝试模拟鼠标点击事件,它对其他所有东西都有效,但对于这个网站却无效。

我测试了一下,现在某种程度上它可以工作了。但每当我尝试在这个网站上运行时:http://www.multiplayerpiano.com/ 看起来似乎不起作用...

<input type="file" id="_LOAD" accept="mp3" />

$('#_LOAD').click();

这不起作用...
我也尝试过...
$('#_LOAD')[0].click();

运气不好...

有人能解释一下是什么阻止了它在那个特定的域名上吗?

// 编辑 - 原始代码

我正在尝试编写一个函数,它将允许我创建文件对话框,只允许特定的 MIME 类型。

var load = function(mime,callback){

    var tempmime = (mime) ? mime : "";

    var tempinp = $('<input style="position:absolute;opacity:0;z-index:-1;pointer-events:none" type="file" id="_LOAD" ' + (tempmime == "" ? "" : 'accept=".' + tempmime + '"') + '/>')

    $("body").append(tempinp);
    $(tempinp).focus().click();
// 
    var aab = function(msg){
    callback(msg);
         $(tempinp).off('change',aab);
        $(tempinp).remove();
    };
    $(tempinp).on('change',aab);
}

所以这是我在没有 .click 工作的情况下所能做到的。


“它不工作”是什么意思? - merours
它没有触发点击事件。 - Adarsh Hegde
2
http://jsfiddle.net/arunpjohny/nxzsqdho/1/ - 我认为如果点击是由非用户触发的方法触发的,浏览器会阻止默认行为。 - Arun P Johny
1
https://dev59.com/d3VC5IYBdhLWcg3wsTbv - epascarello
2个回答

2

你能尝试一下吗?

  $("#_LOAD").trigger('click');

你可以尝试使用类似 $(tempinp).trigger('click'); 的变量名。 - Vikas Kad

1
尝试这个:

document.getElementById("_LOAD").click();

此外,您可以检查是否选择了元素。
console.log("Element exists : " + (document.getElementById("_LOAD") != null ) );    

document.getElementById() 返回一个唯一的元素。此外,<input> 元素没有 length 属性。 - Kaiido

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接