Javascript 如何测试事件的浏览器支持

Javascript 如何测试事件的浏览器支持,javascript,events,browser-feature-detection,Javascript,Events,Browser Feature Detection,具体来说,测试查看input[type=date]是否触发input事件? 您可以这样做: var element = document.getElementById('myElement'); var supported = 'oninput' in element; 通过浏览网站,我建议你们试试 测试B:在输入上使用setAttribute设置oninput并选中 查看node.oninput是否为函数 测试C:使用w3事件api创建输入并伪造按键 查看oninput是否发生火灾 下面

具体来说,测试查看
input[type=date]
是否触发
input
事件?

您可以这样做:

 var element = document.getElementById('myElement');
 var supported = 'oninput' in element;
通过浏览网站,我建议你们试试

测试B:在输入上使用setAttribute设置oninput并选中 查看node.oninput是否为函数 测试C:使用w3事件api创建输入并伪造按键 查看oninput是否发生火灾

下面是来自测试C的JavaScript

function testC(){
    var input = document.createElement('input'),
        e = document.createEvent("KeyboardEvent");
    // set type for DATE
    input.setAttribute('type', 'date');
    e.initKeyEvent("keypress", true, true, window, false, false, false, false, 0, "e".charCodeAt(0));
    // use initKeyboardEvent for webkit
    document.body.appendChild(input);
    input.addEventListener("input", function(e) { alert('C Successful'); e.preventDefault(); e.stopPropagation(); }, false);
    input.focus();
    input.dispatchEvent(e);
    document.body.removeChild(input);
}


编辑:从复制测试代码时只做了几处小的更改(变量的位置,类型=日期,警报)。我刚刚在chrome中运行了它(将
initKeyEvent
更改为
initKeyboardEvent
),它没有产生任何结果,但是注释掉
removeChild
行并手动执行它确实会产生成功消息。不确定为什么模拟事件没有调用它,所以在将其应用到代码中之前,您需要查看一下它。

太好了。我以为是这样的,但没有意识到你需要前缀上的
。这不会检查它是否实际触发。除非我误解了你的评论,否则它不会触发事件
.oninput
激发,但您的测试没有检查它是否激发
.onchange
似乎没有启动。它不会在支票上启动。嗯,因此,这似乎比只检查元素中的“oninput”要复杂得多。
元素中的“oninput”不会检查设置一个
oninput
是否真的会起作用。@PaulS有没有浏览器有一个不起作用的
oninput
?编辑我读了这篇文章,看到firefox是罪魁祸首。但是,由于我参与的项目只支持webkit,所以在这种情况下,我可以通过简单的存在性测试逃脱