Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 13.07.2012, 21:10
Rig Rig вне форума
Интересующийся
Отправить личное сообщение для Rig Посмотреть профиль Найти все сообщения от Rig
 
Регистрация: 21.12.2011
Сообщений: 10

Отмена события действующего на строку таблицы при клике на определенной ячейке?
Прошу прощения если не очень грамотно сформулировал вопрос. Суть в следующем — на строки таблицы повешена определённая функция

<tr onclick=.... и т.д>
<td><a href=...>...</a></td>
<td>...</td>
...
</tr>

понятно, что функция срабатывает при клике в любой области строки, а вот как сделать чтобы, например, при щелчке в ячейке, где размещена ссылка, функция не срабатывала?

Последний раз редактировалось Rig, 13.07.2012 в 21:12.
Ответить с цитированием
  #2 (permalink)  
Старый 13.07.2012, 21:28
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

при клике по ссылке или при клике по ячайке внутри которой ссылка?
Ответить с цитированием
  #3 (permalink)  
Старый 13.07.2012, 22:00
Rig Rig вне форума
Интересующийся
Отправить личное сообщение для Rig Посмотреть профиль Найти все сообщения от Rig
 
Регистрация: 21.12.2011
Сообщений: 10

При клике на ячейке в которой ссылка (включая и ссылку, конечно).
Ответить с цитированием
  #4 (permalink)  
Старый 13.07.2012, 22:28
Аватар для lord2kim
Профессор
Отправить личное сообщение для lord2kim Посмотреть профиль Найти все сообщения от lord2kim
 
Регистрация: 03.05.2011
Сообщений: 848

как вариант, добавьте в начало функции(-й), повешенной(-ых) на строки таблицы, что-то типа такого
function click_tr(e) {
   if (typeof(e.target.href) != "undefined") {
        return true;
   }
   //остальной код функции
}
Ответить с цитированием
  #5 (permalink)  
Старый 13.07.2012, 22:28
Профессор
Отправить личное сообщение для oneguy Посмотреть профиль Найти все сообщения от oneguy
 
Регистрация: 31.05.2012
Сообщений: 396

Нужно повесить ещё обработчик на ячейку, содержащую ссылку, и в нём вызвать event.stopPropagation();

Последний раз редактировалось oneguy, 13.07.2012 в 22:30.
Ответить с цитированием
  #6 (permalink)  
Старый 13.07.2012, 22:31
Аватар для lord2kim
Профессор
Отправить личное сообщение для lord2kim Посмотреть профиль Найти все сообщения от lord2kim
 
Регистрация: 03.05.2011
Сообщений: 848

Сообщение от oneguy Посмотреть сообщение
Нужно повесить ещё обработчик на ячейку, содержащую ссылку, и в нём вызвать event.stopPropagation();
и event.cancelBubble=true для IE
Ответить с цитированием
  #7 (permalink)  
Старый 13.07.2012, 22:31
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

вот так
<!DOCTYPE HTML>
<html>
  <head> 
  
    <style>
      td{
        width:50px;
        height:50px;
        border:1px solid black;
      }
    
    </style>
  </head>
  <body>
   
    <table id='tb'>
      <tr><td>1</td></tr>
    <tr><td>2</td></tr>
      <tr><td><a href='#'> 3</a></td></tr>
      <tr><td>4</td></tr>
    </table>
    <script>

      document.getElementById('tb').onclick = function (e){
       
         var target = e&&e.target || event.srcElement;
      
        if(target.tagName == 'TD'){
        
          search(target)
        
        } else if(target.tagName == 'A')alert('link');
        return false;
      }
        function search(elem){
         
           var tags = elem.getElementsByTagName('a');
          if(tags.length)return;
          alert('ссылок нет');
        }

    </script>

  </body>
</html>
Ответить с цитированием
  #8 (permalink)  
Старый 13.07.2012, 22:39
Профессор
Отправить личное сообщение для oneguy Посмотреть профиль Найти все сообщения от oneguy
 
Регистрация: 31.05.2012
Сообщений: 396

Сообщение от lord2kim
event.cancelBubble=true для IE
Точнее, для IE<9. В IE 9 stopPropagation работает нормально.
Ответить с цитированием
  #9 (permalink)  
Старый 13.07.2012, 22:41
Rig Rig вне форума
Интересующийся
Отправить личное сообщение для Rig Посмотреть профиль Найти все сообщения от Rig
 
Регистрация: 21.12.2011
Сообщений: 10

Ого, сколько вариантов! Сейчас буду все пробовать, спасибо всем за помощь. Отпишусь обязательно!
Ответить с цитированием
  #10 (permalink)  
Старый 13.07.2012, 23:22
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

<style>
  td {
    border: solid 1px;
    cursor: pointer;
    padding: 1em;
  }
</style>
<table id="table">
  <tr>
    <td>нет ссылки</td>
    <td><a href="#">ссылка</a></td>
    <td>нет ссылки</td>
  </tr>
  <tr>
    <td>нет ссылки</td>
    <td><a href="#">ссылка</a></td>
    <td>нет ссылки</td>
  </tr>
<table>

<script>
window.onload = function () {
  var table = document.getElementById('table');

  table.onclick = function (e) {
    e = e || event;
    var target = e.target || e.srcElement;
    if (target.parentNode.tagName == 'TR') {
      if (target.innerHTML.search('href') == -1) {
        alert('здесь ссылки нет')
      } else {
        alert('ячейка со ссылкой')
      }
    } else if (target.tagName == 'A') {
      alert('ссылка')
    }
  }

}
</script>
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изменение фона элемента при клике. psydo Элементы интерфейса 8 28.06.2012 23:53
При клике менять значение в ячейке таблицы edmundantes Events/DOM/Window 8 27.04.2012 17:26
Изменение цвета ячейки в таблице, при наведении на строку другой таблицы Psychosonic Общие вопросы Javascript 12 24.11.2010 16:44