Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 05.07.2012, 09:52
Интересующийся
Отправить личное сообщение для IVAN86 Посмотреть профиль Найти все сообщения от IVAN86
 
Регистрация: 13.03.2011
Сообщений: 11

Сообщение от bes
Такие задачи решаются установкой одного обработчика на родительский контейнер
Задача усложняется если не только строки в таблице, но и сами таблицы могут быть динамическими, и появляться в разных местах страницы.
В таком случае нужно привязывать on к body, а это, думаю, затратно.
Ответить с цитированием
  #12 (permalink)  
Старый 05.07.2012, 10:08
Интересующийся
Отправить личное сообщение для IVAN86 Посмотреть профиль Найти все сообщения от IVAN86
 
Регистрация: 13.03.2011
Сообщений: 11

Сообщение от ksa
Что именно?
Один вариант клика сработает мгновенно, а другой будет срабатывать через полчаса?
Весь вопрос в том, во сколько раз тяжелее метод on
Ответить с цитированием
  #13 (permalink)  
Старый 05.07.2012, 11:10
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

Сообщение от IVAN86
Задача усложняется если не только строки в таблице, но и сами таблицы могут быть динамическими, и появляться в разных местах страницы.
В таком случае нужно привязывать on к body, а это, думаю, затратно.
Тоже вроде не проблема
<style>
  td {border: solid 1px; cursor: pointer}
</style>

<body>
<button id="but">create table</button>

<script>
window.onload = function () {
  var str = '<table>';
    for (var i = 0; i < 10; i++) {
      str += '<tr>';
      for (var j = 0; j < 10; j++) {
        str += '<td>' + i + j + '</td>';
      }
      str += '</tr>';
    }
    str += '</table><br>';

  document.body.onclick = function (e) {
    e = e || event;
    var target = e.target || e.srcElement;
    if (target.id == 'but') {
      document.body.innerHTML += str; 
    } else if (target.tagName == 'TD') {
      alert(target.innerHTML) 
    }
  }

}
</script>
Ответить с цитированием
  #14 (permalink)  
Старый 05.07.2012, 11:20
Интересующийся
Отправить личное сообщение для IVAN86 Посмотреть профиль Найти все сообщения от IVAN86
 
Регистрация: 13.03.2011
Сообщений: 11

Сообщение от bes
Тоже вроде не проблема
Интересное решение.
А если в таблице появятся ссылки и input-ы, как быть?
Ответить с цитированием
  #15 (permalink)  
Старый 05.07.2012, 11:23
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,121

Сообщение от IVAN86
Весь вопрос в том, во сколько раз тяжелее метод on
Он не тяжелый...
Никто особо не вспотеет при его использовании.
Ответить с цитированием
  #16 (permalink)  
Старый 05.07.2012, 11:25
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

Сообщение от IVAN86
А если в таблице появятся ссылки и input-ы, как быть?
Приведите пример, в котором у вас не получается применить данный метод.
Ответить с цитированием
  #17 (permalink)  
Старый 05.07.2012, 11:40
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,121

Да это как в анекдоте:

На выпуске агентов по защите авиалиний от терористов...
- Представьте, что вы в лайнере где 500 пассажиров и есть один терорист с бомбой... Ваши действия?
- Я путем тестов, которым обучался, вычислю того терориста и нейтрализую.
- Хорошо... Усложним задачу. У того терориста есть сообщник с еще одной бомбой!
- Так же используя тесты, вычислю обоих... Дождусь пока один отвлечется, устраню другого, а потом и первого.
- Хорошо... А если у терористов будут свои люди в салоне? И у них тоже будут бомбы?
- Я не совсем понимаю... Вы сами-то за кого?
Ответить с цитированием
  #18 (permalink)  
Старый 05.07.2012, 12:28
Интересующийся
Отправить личное сообщение для IVAN86 Посмотреть профиль Найти все сообщения от IVAN86
 
Регистрация: 13.03.2011
Сообщений: 11

Сообщение от ksa
На выпуске агентов по защите авиалиний от терористов...
Примерно как в анекдоте.
Но, всё же, я думаю, код не будет работать как надо в этом примере:

Код:
<style>
  td {border: solid 1px; cursor: pointer}
</style>


<body>
<button id="but">create table</button>


<script>
window.onload = function () {
  var str = '<table>';
    for (var i = 0; i < 10; i++) {
      str += '<tr>';
      for (var j = 0; j < 10; j++) {
        str += '<td><input type="checkbox" /> ' + i + j + '</td>';
      }
      str += '</tr>';
    }
    str += '</table><br>';

  document.body.onclick = function (e) {
    e = e || event;
    var target = e.target || e.srcElement;
    if (target.id == 'but') {
      document.body.innerHTML += str; 
    } else if (target.tagName == 'TD') {
      alert(target.innerHTML) 
    }
  }

}
</script>
Ответить с цитированием
  #19 (permalink)  
Старый 05.07.2012, 12:49
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

<style>
  td {border: solid 1px; cursor: pointer}
</style>

<body>
<button id="but">create table</button>

<script>
window.onload = function () {
  var str = '<table>';
    for (var i = 0; i < 10; i++) {
      str += '<tr>';
      for (var j = 0; j < 10; j++) {
        str += '<td><input type="checkbox" /> ' + i + j + '</td>';
      }
      str += '</tr>';
    }
    str += '</table><br>';

  document.body.onclick = function (e) {
    e = e || event;
    var target = e.target || e.srcElement;
    if (target.id == 'but') {
      document.body.innerHTML += str; 
    } else if (target.tagName == 'TD') {
      alert(target.children[0].checked + '; ' + target.innerText || target.textContent);
     //в FF только textContent, в IE только innerText
    }
  }

}
</script>

Последний раз редактировалось bes, 05.07.2012 в 13:10.
Ответить с цитированием
  #20 (permalink)  
Старый 05.07.2012, 13:18
Интересующийся
Отправить личное сообщение для IVAN86 Посмотреть профиль Найти все сообщения от IVAN86
 
Регистрация: 13.03.2011
Сообщений: 11

bes - Хорошее решение!

Я решил эту задачу на JQ таким образом:
$("body").on("click", "tr", function(){ alert(1); })
  .on({
	"mouseenter": function(){ $("body").off("click", "tr"); },
	"mouseleave": function(){ $("body").on("click", "tr", function(){ alert(1); }); },
  }, ".tr input, .tr a");


Вопрос на сколько это сильно грузит браузер остаётся открыт.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
О фрилансе (Личный опыт) free Оффтопик 105 18.08.2011 17:02
Правда ли то, что с помощью JQuery можно сделать все, что связано с JavaScript? Bandicoot Оффтопик 3 10.03.2011 15:09
Что лучше: библиотека или чистый JS? `p r o x y Библиотеки/Тулкиты/Фреймворки 4 26.11.2010 11:16
Что лучше self.open или window.open ? и почему? alb Events/DOM/Window 3 28.07.2010 20:53
Что лучше, display или visibility? FirstFrost Общие вопросы Javascript 1 21.07.2010 05:42