Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #21 (permalink)  
Старый 19.07.2012, 14:11
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

Вроде очень даже удобная схема получается
<input type="button" value="click" class="but1">
<input type="button" value="click" class="but2">

<script>
window.onload = function () {//onload begin

  document.body.onclick = function (e) {//onclick begin
    e = e || event;
    var target = e.target || e.srcElement;
    
    if (target.className == 'but1') {
      alert(target.className);
      return;
    }

    if (target.className == 'but2') {
      alert(target.className);
      return;
    }

  }//onclick end

}//onload end
</script>


<input type="button" value="click" class="but1">
<input type="button" value="click" class="but2">

<script>
window.onload = function () {//onload begin

  document.body.onclick = function (e) {//onclick begin
    e = e || event;
    var target = e.target || e.srcElement;
    
    if (target.className == 'but1') {
      alert(target.className);
    } else 

    if (target.className == 'but2') {
      alert(target.className);
    }

  }//onclick end

}//onload end
</script>


<input type="button" value="click" class="but1">
<input type="button" value="click" class="but2">

<script>
window.onload = function () {//onload begin

  document.body.onclick = function (e) {//onclick begin
    e = e || event;
    var target = e.target || e.srcElement;
    
    switch (target.className) {//switch begin
      case 'but1': {
        alert(target.className);
        break;
      }
      case 'but2': {
        alert(target.className);
        break;
      }
    }//switch end

  }//onclick end

}//onload end
</script>

Последний раз редактировалось bes, 19.07.2012 в 14:52.
Ответить с цитированием
  #22 (permalink)  
Старый 19.07.2012, 15:25
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

Сообщение от leko
а если потом надо поменять функцию, это ж сколько работы, да и вероятность где-то пропустить достаточна высокая
что там можно упустить, если абсолютно все обработчики весят на body?

Сообщение от leko
таких строк в проекте встречается 20, 50, 100 раз
да хоть 9000, всё равно обработчик то один. а приведённый пример JQ, кстати, будет обходить все эти элементы

Сообщение от Deff
с другой - часто удобно смотря на элемент в исходнике страницы понимать чем он обрабатывается (Хотя бы по классу
а ещё легче понять, когда перед тобой (глазами, т.е.) висит хеш, где ключ - селектор, а функция - значение. так ещё проще понять, что, куда и зачем.

Сообщение от bes
При обработке на body как раз класс или id нужен, только искать уже теперь придётся не по всему коду, а только в обработчиках body
JQ засирает элементы, давая им всем ID (или другой атрибут), коим является рандомное число. это число используется для $.data, и, как Вы уже поняли, для лёгкого делегирования. Вывод сделайте сами

Сообщение от bes
Вроде очень даже удобная схема получается
можно сделать проще - как я имел в виду.

Сообщение от melky Посмотреть сообщение
<script>
function rand () {
    return 255 * Math.random() | 0;
}

function delegater (e) {
    e = e || event;
    e = e.target || e.srcElement;
    e.style.backgroundColor = "rgb("+ rand() +", " + rand() + ", " + rand() + ")";
}
</script>

<body *!*onclick="delegater(event)"*/!*>
    <div>DIV</div>
    <p>P</p>
    <a href="#">A</a>
</body>
потестировал в IE10 в режиме эмуляции IE7, и во всех свежаках. работает

единственная проблема возникнет, когда захочется проделегировать НЕвсплывающие события - к хорошему быстро привыкаешь
Ответить с цитированием
  #23 (permalink)  
Старый 19.07.2012, 15:34
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

Сообщение от melky
можно сделать проще - как я имел в виду.
Ну почти тоже самое.
Только если для каждого элемента задавать разные обработчики, то всё равно их придётся как-то распознавать (например, по классу или id)
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не работает обработчик события в Mozilla Firefox Guliashik Events/DOM/Window 11 07.06.2012 00:31
О фрилансе (Личный опыт) free Оффтопик 105 18.08.2011 17:02
обработчик события focus для окна Сергей Д Internet Explorer 4 22.09.2010 17:33
Обработчик события click BOGDAN Общие вопросы Javascript 6 02.03.2009 20:52
отправка файла через обработчик события submit starrich AJAX и COMET 2 13.08.2008 22:29