JQuery: событие mouseleave, кажется, срабатывает, когда он не должен - PullRequest
1 голос
/ 08 марта 2010

Учитывая приведенную ниже html-таблицу и скрипт, показанный ниже, у меня возникла проблема, при которой событие отпускания мыши возникает сразу после ввода мыши, даже если я не перемещаю мышь из строки.

<script type="text/javascript" language="javascript">
    function highlightRows(iMainID) 
    {
        $('tr[mainid=' + iMainID+ ']').each(function() {
            if ($(this).attr('old') == undefined) {
                $(this).attr('old', $(this).css('backgroundColor'));
            }
            $(this).animate({ backgroundColor: "#FFFFCC" }, 500);
            $(this).mouseout(function() {
                if ($(this).attr('old') != undefined) {
                    $(this).animate({ backgroundColor: $(this).attr('old') }, 500);
                }
            });
        });        
    }
</script>
<table>
    <tr> 
      <td mainid="1" onmouseover='highlightRows(1)'><div>text</div></td>
      <td mainid="1" onmouseover='highlightRows(1)'><div>text</div></td>      
      <td mainid="2" onmouseover='highlightRows(2)'><div>text</div></td>
    </tr>
<table>

Ответы [ 4 ]

3 голосов
/ 08 марта 2010

Как указали Пойнти и Джер, вам следует выбрать одну модель (JQuery) или другую (в любом случае в HTML), не смешивая их.

Скорее всего, ваша двойная запись связана с тем, что вы подписываетесь несколько раз на одно и то же событие. (Если вы дважды наведите курсор мыши, вы получите два обработчика события mouseout, которые будут вызваны оба.)

Также обратите внимание на дубликаты значений mainid. Это похоже на проблему и может быть причиной вашей проблемы.

1 голос
/ 08 марта 2010

почему бы не использовать .hover?

$('tr[mainid=' + iMainID+ ']').hover(
        function()
        {
            $(this).addClass('hoverClass');
        },
        function()
        {
            $(this).removeClass('hoverClass');
        }
    );
1 голос
/ 08 марта 2010

jquery способ сделать это - просто использовать hover , установить в функции $(document).ready и, как @pointy сказал, чтобы исключить onmouseover все вместе

$(document).ready(function(){
    $('tr').hover(function() {
       if ($(this).attr('old') == undefined) {
          (this).attr('old', $(this).css('backgroundColor'));
       }
       $(this).animate({ backgroundColor: "#FFFFCC" }, 500);
    }, function() {
       if ($(this).attr('old') != undefined) {
           $(this).animate({ backgroundColor: $(this).attr('old') }, 500);
       }
    });
});
0 голосов
/ 08 марта 2010

Вы, вероятно, хотите сделать что-то вроде этого:

function yourMouseOver(){...}
function yourMouseOut(){...}

с:

<td onmouseover="yourMouseOver()" onmouseout="yourMouseOut()">html</td>

Установка события onmouseout при каждом запуске события onmouseover является избыточной.

...