2011-09-01 44 views
3

我在幾個地方問過這個問題,現在我正在投射儘可能廣泛的網絡來查看是否有可以使用的解決方案。考慮下面的HTML:如何在IE中使用HTML DOM方法觸發jQuery更改事件?

<select id="test"> 
    <option value="">Select One...</option> 
    <option value="1">One</option> 
    <option value="2">Two</option> 
</select> 

及以下的jQuery事件綁定:

$("#test").change(function(event) { 
    console.log("Changed"); 
}); 

我希望能有變化時只使用DOM方法觸發。也就是說,我不想調用jQuery .change().trigger()方法來觸發jQuery更改事件。這是在browser automation framework的範圍內,它需要在任何頁面上自動選擇<select>元素中的選項,因此不能依賴於任何特定頁面中加載的jQuery。此外,我們只對IE的這個問題的解決方案感興趣,因爲我們在瀏覽器中遇到困難。另請注意,我們需要一個適用於所有版本6-9的IE的解決方案。我願做類似下面的(故意IE特定代碼如下):

var e = document.getElementById('test'); 
e.item(1).selected = true; 
e.fireEvent("onchange"); // What needs to happen here to get the jQuery event to fire? 

然而,這不會導致觸發jQuery的事件。你可以在this link找到這個特殊問題的完整實例。我必須調用哪些特定的代碼才能使其工作?

回答

4

你可以這樣做:

var e = document.getElementById('test'); 
var evt = document.createEvent("HTMLEvents"); 
    evt.initEvent("change", true, true); 
    e.dispatchEvent(evt); 

小提琴這裏http://jsfiddle.net/a5DUE/7/(在IE9對我的作品)

+0

哇,光滑,不知道你能做到這一點 – Matt

+0

好主意,但對於'createEvent支持( )'只在IE9中添加。有沒有類似的方法(如也許'createEventObject()')將適用於以前的版本? – JimEvans

+0

我知道的唯一方法是使用e.fireEvent(「onchange」); (在IE9上不適用於我,所以我認爲這是您遇到的瀏覽器問題) –

相關問題