2012-06-04 2 views
1

В режиме onmouseover над ячейкой создается div внутри этой ячейки. У этого div есть onclick. Но этот onclick не выполняется. Вот некоторые примеры кода: JSFiddleСобытие, не выполненное по событию

JavaScript:

var oldCell=''; 
function addDiv(cell){ 
    if(oldCell != ''){ 
     oldCell.innerHTML = ''; 
    } 
    cell.innerHTML = "<div class='innerDiv' onclick='console.log(this.parentNode);'></div>"; 
    oldCell = cell; 
} 

HTML

<table border='1px solid black'> 
    <tr> 
     <td class='cell' onmouseover='addDiv(this)'></td> 
     <td class='cell' onmouseover='addDiv(this)'></td> 
    </tr> 
    <tr> 
     <td class='cell' onmouseover='addDiv(this)'></td> 
     <td class='cell' onmouseover='addDiv(this)'></td> 
    </tr> 
</table>​ 

Я попытался фокусирование на DIV, но это не вок либо. Я также попытался дать ячейке onclick, а затем сосредоточиться на ячейке вместо div, но это не работает в Chrome, но в FF.

+0

событие onclick отлично справилось со мной, оно напечатало html родительского узла на консоли. – shanabus

+0

Это работает и для меня. (Firefox) – Pointy

+2

Это было ** не ** работать для меня (Chrome-dev). – Neal

ответ

4

Это кажется, что событие Mouseover создает новый объект внутри него каждый раз «Mouseover» событие называется. Нажатие на объект вызывает событие mouseover, что, скорее всего, заменяет элемент и, следовательно, делает невозможным вызов события onclick.

Моя догадка в списке событий: - Mouseover - MouseDown -> Mouseover - Объект заменен. - MouseUp (не считается щелчком, так как новый объект получает только мышь вверх)


Edit:

Если ваша цель состоит в том, чтобы просто создать эффект MouseHover, то вы должны использовать парить CSS в ключевое слово.

Смотрите эту скрипку, что делает по существу то, что вы пытаетесь сделать: http://jsfiddle.net/Tb2kK/27/


Edit: Для того, чтобы сделать это аналогично тому, как вы делаете это, вы должны проверить, если DIV уже существует. Одним из способов было бы присвоить идентификатор: http://jsfiddle.net/mZdpN/

+0

Исправлено: http://jsfiddle.net/Tb2kK/24/ Событие 'mouseover' запускается на' mousedown'. –

+0

Странно то, что когда я сосредотачиваюсь на ячейке, в ff он выполняет div onclick ... но хром все еще не делает. http://jsfiddle.net/Tb2kK/25/ – jdepypere

+0

@arbitter: Firefox даже выполнил обработчик без фокуса (по крайней мере для меня). В браузерах используются разные двигатели, поэтому то, что работает в одном браузере, не должно работать в другом.Например, в Chrome появляется ошибка, в которой изменение типа курсора программно запускает событие 'mousemove'. –

0

заменить JS с

<script type="text/javascript"> 
    var oldCell = null; 
    function addDiv(cell){ 
     if (oldCell != null){ 
      oldCell.innerHTML = ''; 
     } 

     var div = document.createElement('div'); 
     div.className = 'innerDiv'; 
     div.onclick = function() { 
      console.log(this.parentNode); 
     }; 
     cell.appendChild(div); 
     oldCell = cell; 
    } 
</script> 
+0

Это ** не работает ** в chrome-dev – Neal

+0

Не работает в Chrome или FF ... – jdepypere

+0

он работает в FF для меня просто отлично смотри http://jsfiddle.net/Tb2kK/23/ я смотрю для chrome – pbaris

Смежные вопросы