2012-11-20 45 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