Как прикрепить onchange в IE7 + к родительскому элементу - PullRequest
3 голосов
/ 17 марта 2011

У меня есть динамическая форма, где строки добавляются и удаляются с помощью JavaScript.От Safari, Chrome и Firefox форма работает прекрасно.В IE, давайте просто скажем, что это не так ...

<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 об onchange и нашел комментарий о том, что onchange не может быть присоединен, но, возможно, существует решение?

1 Ответ

0 голосов
/ 03 декабря 2011

Я несколько удивлен тем, что работает в Safari, FF и Chrome.Это то, что я бы никогда не подумал попробовать с классом-оберткой, потому что это не элемент формы.Умный.

Если это не мешает чему-то другому, и пока IE не избавится от мира для улучшения человечества, я думаю, что жизнеспособной альтернативой может быть использование либо PeriodicalExecutor, либо расширения Abstract.TimedObserver для проверкивремя от времени в классе-обертке, возможно в комбинации для проверки, является ли браузер IE или нет.

...