2012-11-20 42 views

回答

3

通过查看this网站,我建议你尝试

试验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); 
} 

编辑:测试代码是从the test page复制,只有一对夫妇的微小变化(VAR的位置,类型=日期,提醒)。我刚刚在Chrome中运行它(在更改initKeyEventinitKeyboardEvent之后),但它不会产生任何结果,但是注释掉removeChild行并手动执行确实会导致导致成功消息。不知道为什么模拟的事件没有调用它,所以你需要在你的代码中应用它之前查看它。

+1

嗯,所以它看起来比只检查元素中的'oninput'更复杂 – McGarnagle

+0

''oninput'元素'不会检查设置'oninput'是否会实际执行任何操作。 –

+0

@PaulS做任何浏览器有一个'oninput'这不会做任何事情? *编辑*我阅读文章,看到Firefox是罪魁祸首。但是因为我所支持的项目只支持webkit,所以在这种情况下我可以简单地使用存在测试 – wheresrhys

3

jsFiddle Example

你可以这样做:

var element = document.getElementById('myElement'); 
var supported = 'oninput' in element; 
+1

很好。我认为这是类似的东西,但没有意识到你需要'on'前缀 – wheresrhys

+1

这不会检查它实际上是火灾。 –

+0

除非我误解您的评论,否则不会触发该事件。 http://jsfiddle.net/hMTV8/ – Gabe