2014-09-04 3 views
4

간단한 툴팁 기능을 작성하여 here으로 작성했습니다.

두 핸드러 함수 모두 .hover()에 설정되어 있고 $(this)과 그 외의 2 개의 변수에 액세스해야합니다. 그것을 달성 할 위해서, 나는 두 핸들러에서의 같은 3 개 변수를 선언 :

, 그래서 내 질문에

DRY 원칙이 존중되어야

$('a').hover(
    function() { 
     var $this = $(this); 
     var link_offset = $this.offset(); 
     var link_tooltip = $this.data('tooltip'); 
     // Rest of the code 
    }, 
    function() { 
     var $this = $(this); 
     var link_offset = $this.offset(); 
     var link_tooltip = $this.data('tooltip'); 
     // Rest of the code 
    } 
); 
됩니다 : 설정 같은 변수를 전달하는 다른 현명한 있는가/덜 더러운 방법 두 기능 모두 .hover() 안에 있습니까?

Obvioulsy, 변수는 전역 변수가 될 수 없습니다 (어쨌든 전역 변수는 악의적입니다).

jQuery 또는 pure JS로이 작업을 수행하는 방법에 대한 아이디어가 있으십니까?

+1

당신이 정말로, 당신은 (은'mouseenter을 할당 할 수 있습니다해야하는 경우)'와'하는 MouseLeave()'이벤트를 직접 처리기 및 라우팅 이 값을 설정하는 사용자 지정 함수를 통해 호출합니다. 그러나 그것은 정말로 필요합니까? – Kami

답변

7

전화 익명 콜백 내부의 하나 개라는 기능 :

$('a').hover(function() { 
     hoverFunc($(this), true) 
    }, function() { 
     hoverFunc($(this), false) 
    }); 

function hoverFunc($this, is_hovered) { 
    var link_offset = $this.offset(); 
    var link_tooltip = $this.data('tooltip'); 
    if (is_hovered) { 
     console.log('ok') 
     // do something 
    } else { 
     console.log('out') 
     // do something else 
    }; 
} 

http://jsfiddle.net/mblase75/8njk2m32/

+0

물론! 간단하고 달콤한. 고마워. – lesssugar

+1

답변을 업데이트하고 바이올린을 추가했습니다. – Blazemonger