jquery 라이브 호버


161

다음 jquery 코드를 사용하여 마우스로 가리키고있는 테이블 행에 대해서만 컨텍스트 삭제 버튼을 표시합니다. 이것은 작동하지만 js / ajax로 즉시 추가 된 행에는 적용되지 않습니다 ...

라이브 이벤트로이 작업을 수행 할 수있는 방법이 있습니까?

$("table tr").hover(
  function () {},
  function () {}
);

답변:


245

jQuery 1.4.1은 이제 live () 이벤트에 대해 "호버"를 지원하지만 하나의 이벤트 핸들러 함수 만 사용합니다.

$("table tr").live("hover",

function () {

});

또는 mouseenter 용과 mouseleave 용의 두 가지 기능을 제공 할 수 있습니다.

$("table tr").live({
    mouseenter: function () {

    },
    mouseleave: function () {

    }
});

그래도 여전히 나를 위해 작동하지 않습니다. 나는 이것을 시도했다 : 내가 어디 잘못 가고 있습니까? > $ ( 'table tr'). live ( 'hover', function () {$ (this) .find ( '. deletebutton'). toggle ();});
Shripad Krishna 2016

1
이것은 올바르지 않으며 작동하지 않습니다. 에 대한 문서에서 "여러 이벤트"헤더를 참조 live: api.jquery.com/live
제이슨

34
jQuery를 1.4.2로, .live ( "마우스 오버") ( "mouseenter하는 MouseLeave"), ( "마우스 오버로 마우스") .live하지 .live와 같습니다 - 참조 bugs.jquery.com/ticket/6077 그래서, 않습니다. live ( "mouseenter mouseleave", function () {...}) 또는 .live ( "mouseenter", function () {...}). live ( "mouseleave", function () {...})
aem

2
@aem 감사합니다, 이것은 나를 위해 일했습니다 : $ ( "table tr"). live ( "mouseenter", function () {...}). live ( "mouseleave", function () {...});
jackocnr

3
당으로 JQuery와 .live문서 페이지 가 사용 말한다 .on대신. "jQuery 1.7부터 .live () 메소드는 더 이상 사용되지 않습니다. .on ()을 사용하여 이벤트 핸들러를 첨부하십시오."
johntrepreneur

110
$('.hoverme').live('mouseover mouseout', function(event) {
  if (event.type == 'mouseover') {
    // do something on mouseover
  } else {
    // do something on mouseout
  }
});

http://api.jquery.com/live/


나를 위해 일했습니다. +1 마우스 오버와 마우스 입력으로 Philippe의 버전을 시험해 보았습니다. 그러나 이것은했다. 감사!
eduncan911

.live더 이상 사용되지 않습니다. 지금 교체 방법에 대한 Andre의 답변을 참조하십시오.
johntrepreneur

1
여기서 mouseovermouseout이벤트를 사용 하면 사용자가 요소 내부에서 마우스를 움직일 때 코드가 계속 실행됩니다. 내 생각 mouseentermouseleave는 항목에 만 불 한 번 것이기 때문에 더 적합합니다.
johntrepreneur

60

.live() jQuery 1.7부터 사용되지 않습니다.

.on()대신 사용하고 자손 선택기를 지정 하십시오.

http://api.jquery.com/on/

$("table").on({
  mouseenter: function(){
    $(this).addClass("inside");
  },
  mouseleave: function(){
    $(this).removeClass("inside");
  }
}, "tr");  // descendant selector

6
이것은 jquery 1.9에서 완벽하게 작동합니다. 모든 라이브 및 델리게이트 솔루션은 더 이상 사용되지 않습니다! 누군가가 받아 들인 대답을 받아들이지 않고 대신 이것을 받아 들일 수 있다면 정말 좋을 것입니다.
jascha

5

jQuery 1.4.1부터는 호버 이벤트가 작동합니다 live(). 기본적으로 mouseenter 및 mouseleave 이벤트에 바인딩되며 1.4.1 이전 버전에서도 수행 할 수 있습니다.

$("table tr")
    .mouseenter(function() {
        // Hover starts
    })
    .mouseleave(function() {
        // Hover ends
    });

이것은 두 개의 바인딩이 필요하지만 잘 작동합니다.


5

이 코드는 작동합니다 :

    $(".ui-button-text").live(
        'hover',
        function (ev) {
            if (ev.type == 'mouseover') {
                $(this).addClass("ui-state-hover");
            }

            if (ev.type == 'mouseout') {
                $(this).removeClass("ui-state-hover");
            }
        });

2
"ui-state-hover"란 무엇입니까? 이것이 사용자의 원래 질문에 어떻게 적용됩니까?
IgorGanapolsky 2016 년

2

경고 : 호버의 라이브 버전에서는 성능이 크게 저하됩니다. IE8의 큰 페이지에서 특히 눈에.니다.

AJAX와 함께 여러 수준의 메뉴를로드하는 프로젝트를 진행하고 있습니다 (이유에는 이유가 있습니다). 어쨌든, 나는 크롬에서 잘 작동하는 호버에 라이브 방법을 사용했습니다 (IE9는 괜찮 았지만 훌륭하지는 않았습니다). 그러나 IE8에서는 메뉴가 느려졌을뿐만 아니라 메뉴가 떨어지기 전에 몇 초 동안 마우스를 가져 가야했지만 스크롤 및 간단한 확인란 확인을 포함하여 페이지의 모든 것이 느려졌습니다.

로드 된 이벤트를 직접 바인딩하면 적절한 성능이 얻어졌습니다.


2
유용하지만 답변보다 더 많은 의견.
mikemaccana 2013
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.