2013-07-26 2 views
1

Я визуализирую два элемента на странице JSP динамически, с динамическими идентификаторами. При наведении мыши на каждый элемент я делаю вывод div, а при выводе мыши я делаю то же значение displaynone. Проблема в том, что когда я наводил на div, div продолжает мигать. Как я могу это решить?Использование mouseover и mouseout в элементе делает зависание постоянно мигающим

Примера код:

<table> 
    <tr> 
     <td> 
      <div onmouseover="showblock(hoverdivid)" onmouseout="hideblock(hoverdivid)">india</div> 
      <div class="hoverdiv" id="dynamicallygenerated"> 
       <li>a list of checkboxes with state names of the country hovered will be inserted using ajax</li> 
      </div> 
     </td> 
     <td> 
      <div onmouseover="" onmouseout="">america</div> 
      <div class="hoverdiv" id="dynamicallygenerated"> 
       <li>a list of checkboxes with state names of the country hovered will be inserted using ajax</li> 
      </div> 
     </td> 
    </tr> 
</table> 

<script> 
var showblock; 
var hideblock; 
$(document).ready(function (e) { 

    showblock = function (id) { 

     $("#" + id).show(); 

    } 
    hideblock = function (id) { 

     $("#" + id).hide(); 

    } 

}); 
</script> 

Продление моего вопрос

я упомянул, что я вставив флажки в парении с помощью Ajax, в том же режиме висения у меня есть кнопка добавления, которая добавляет ценности, которые я зарегистрировалась наведите курсор на другой div вне таблицы. у меня есть две страны, поэтому два зависания с их цитатами, поэтому, когда я проверил и нажимаю на добавление значений двух зависаний, которые будут отображаться, которые должны быть отображены, должны отображаться индивидуально, предлагайте мне подход к выполнению вышеуказанного требования.

+0

где Javascript код? –

+0

Я не могу решить проблему, не видя кода. Но я предполагаю, что это связано с тем, что когда вы устанавливаете 'display: none', элемент исчезает, поэтому ваша мышь больше не находится над элементом, и запускается событие mouseout. Затем появляется элемент, и запускается событие mouseover. Таким образом, он петляет между ними навсегда. –

+0

Возможно, если вы попробуете ['visibility: hidden'] (https://developer.mozilla.org/en-US/docs/Web/CSS/visibility) вместо' display: none', это позволит избежать стрельбы из события. –

ответ

1

Это происходит потому что, когда отображается hoverdiv, ваша мышь находится на нем, поэтому происходит событие mouseleave, поэтому hoverdiv исчезает, а затем ваша мышь находится на первом div, так что происходит событие mouseenter, так что hoverdiv появляется снова .... и так далее .. это вызывает мерцание

Мое лучшее предложение - вложить hoverdiv: (вам нужно немного подкорректировать css)

<table> 
    <tr> 
     <td> 
      <div onmouseover="" onmouseout=""> 
       india 
       <div class="hoverdiv"></div> 
      </div> 
     </td> 
     <td> 
      <div onmouseover="" onmouseout=""> 
       america 
       <div class="hoverdiv"></div> 
      </div> 
     </td> 
    </tr> 
</table> 

Когда hoverdiv находится внутри другой div, mouseleave не будет срабатывать при наведении hoverdiv

+0

спасибо за ответ, и я немного запутался с вашим заявлением, когда мышь находится на div, в котором у меня есть событие mouseover, которое вызывает mouseleave. извините, если вопрос сумасшедший, новичок в части пользовательского интерфейса. – user1927762

+0

@ user1927762 Вы настроили его так, что когда 'mouseover' срабатывает в' element', элемент получает 'display: none'. Этот стиль заставляет элемент исчезать. Перед исчезновением элемента мышь была над элементом. Теперь, когда элемент ушел, мышь больше не над элементом.Таким образом, браузер запускает событие «mouseleave». –

+0

Вы наводите «india», затем появляется hoverdiv. (теперь ваша мышь находится в hoverdiv, так что mouseleave запускается). после того, как hoverdiv исчезает, ваша мышь снова находится на «индие», так что hoverdiv появляется снова .. этот процесс происходит много раз быстро –

0

Рабочая Демонстрационный http://jsfiddle.net/cse_tushar/FKacT/1

HTML

<table border="1"> 
    <tr> 
     <td> 
      <div class="div">india</div> 
      <div class="hoverdiv" id="dynamicallygenerated"> 
       <li>a list of checkboxes with state names of the country hovered will be inserted using ajax</li> 
      </div> 
     </td> 
     <td> 
      <div class="div">america</div> 
      <div class="hoverdiv" id="dynamicallygenerated"> 
       <li>a list of checkboxes with state names of the country hovered will be inserted using ajax</li> 
      </div> 
     </td> 
    </tr> 
</table> 

Css

td{ 
    vertical-align: top; 
} 

JS

$(document).ready(function() { 
    $('.div').hover(function() { 
     x = $(this).css('width'); 
     $(this).parent().find('.hoverdiv').show(); 
     $(this).css('width', $(this).parent('td').width()); 
    }, function() { 
     $(this).css('width', x); 
     $(this).parent().find('.hoverdiv').hide(); 
    }); 
}); 
+0

что вы имеете в виду? –

+0

О, ты имеешь в виду, что мне нужно делать противоположное? –

+0

oh ... !!! сделал еще один тест, если он работает? –