2011-03-17 30 views
3

我有一個動態表單,使用JavaScript添加和刪除行。從Safari,Chrome和Firefox中,表單效果非常好。在IE中,好,讓我們只說這不...如何將IE7 +中的onchange附加到父元素

<div id="container"> 
    <div class="row"> 
    <input name="name[]"> 
    <select name="color[]"> 
     <option>Red</option> 
     <option>Green</option> 
     <option>Blue</option> 
    </select> 
    </div> 
    <div class="row"> 
    <input name="name[]"> 
    <select name="color[]"> 
     <option>Red</option> 
     <option>Green</option> 
     <option>Blue</option> 
    </select> 
    </div> 

    <a id="add-another" href="#">Add a row</a> 
</div> 

<script src="prototype.js"></script> 
<script> 
    $("container").observe("change", function(ev) { 
    alert("changed " + ev.element() + " to " + $F(ev.element())); 
    }); 

    $$("#container input, #container select").each(function(el) { 
    el.observe("change", function(ev) { 
     alert("changed[2] " + ev.element() + " to " + $F(ev.element())); 
    }); 
    }); 

    $("add-another").observe("click", function(ev) { 
    var cloned = $("container").down(".rule").clone(true); 
    $("container").insert({top:cloned}); 
    ev.stop(); 
    }); 
</script> 

我看到的唯一的onchange消息是changed[2]。我寧願去看change,因爲那意味着我只有一個聽衆,而不是幾百個。

是否有任何已知的解決方法,以便我可以在父節點上安裝單個觀察器並接收onchange事件?

我讀過MSDN article on onchange,我確實發現了onchange無法附加的效果,但也許存在解決方案?

回答

0

我對Safari,FF和Chrome的工作感到有點驚訝。這是我永遠不會考慮嘗試使用包裝類的東西,因爲它不是表單元素。聰明。

除非有別的東西干擾,直到IE從世界擺脫對人類的改善,我認爲一個可行的選擇可能是利用兩種PeriodicalExecutorAbstract.TimedObserver的擴展,檢查包裝類每一次的同時,可能結合檢查瀏覽器是否爲IE瀏覽器。

相關問題