2013-03-22 1 views
1

Javascript 및 jQuery로 시작하기 때문에 정말 바보 같은 질문 인 경우 화를 내지 마십시오. 우리는 toggle 함수를 바인딩하여 div의 내용을 대체해야하지만, 실행하면 div 전체가 "축소"됩니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까? 미니 스크립트는 (임의의 두 상태 사이를 전환하지 않습니다,미니 jQuery 스크립트는 내용을 바꾸지 않고 div를 사라지게합니다.

function highlight(evt){ 
    $('#evtTarget').toggleClass('highlighted'); 
} 

function func_1(evt){ 
    $('#evtTarget').html("CLICK!!"); 
} 

function func_2(evt){ 
    $('#evtTarget').html("CLACK!!"); 
} 

$(function(){ 
    $('#evtTarget').hover(highlight,highlight); 
    $('#evtTarget').toggle(func_1,func_2); 
}); 
+0

http://jsfiddle.net/NZjvJ/2 – stackunderflow

+2

'toggle', 당신은 그것을 사용하려고하는 방법은 1.8에서 사용되지 및 제거 : http://api.jquery.com/toggle/

은 당신이 원하는 것은이 같은 것입니다 1.9 인치. 1.7을 사용하는 바이올린입니다. http://jsfiddle.net/hhwmW/. 이 페이지의 큰 노트를보십시오 : http://api.jquery.com/toggle-event/ – sberry

+0

이 코스는 jQuery 1.3을 기반으로하고 있으며, 속성 필터에서 따옴표가 누락되어 문제가 발생했습니다. – RubenGeert

답변

1

toggle 쇼 또는 요소를 숨 깁니다 업데이트 : @sberry이 감동적인에서 지적, 그것은 당신이 의도 한 방식으로 작동하는 데 사용 버전 1.8까지).

function 인수를 사용하여 호출하면 (문서 사용에 대한 유효한 인수가 아닌) 인수없이 호출 된 것처럼 동작합니다 (예 : 숨김 인 경우 표시). , 보이면 숨 깁니다). div가 처음부터 표시 되었기 때문에 div가 숨겨졌습니다.

0

당신이하려는 것은 document.ready에서 토글을 사용하는 것입니다 .... 토글 .. div가 숨겨져 있다면 숨긴다 ... 그래서 이제 evtTarget이 document.ready에 표시되고 따라서 토글 기능은 ... 그것을 숨 깁니다 (다른 이벤트가 보여 전환을 호출하지에 숨겨진 DIV 다시)

당신이 필요로하는 클릭과 같은 전환에 대한 이벤트, 또는 어떤 경우 ....

$(function(){ 
    $('#someDiv').click(function(){ 
     $('#evtTarget').toggle(func_1,func_2); 
    }); 
}); 
를 가져 또는 keup
+0

@bipen downvoter가 아니지만, 당신의 대답은 정말로 틀렸다고 믿습니다. OP는 표시/숨기기가 아닌 ("토글 버튼"또는 "체크 상자"의) 비추천 된 동작을 원했습니다. 'click' 콜백에서 현재 토글을 호출하면이를 수행하지 않고 이전 문서는'document.ready'에서 정상적으로 작동합니다. – mgibsonbr

+0

ok thanks ... :) .. 나는 이것을 다음으로 삭제할 것입니다. – bipen

+0

@mgibsonbr 아니요, OP (나)는 그가 오해 한 것을 파악하고 싶었습니다. 주요 문제는 내 수업에서 jQuery 1.3을 사용하고 jQuery 1.9를 사용하는 것 같습니다. – RubenGeert

1

토글 문서의 경우이 부분을 참조하십시오.

http://api.jquery.com/toggle/

호버 (hover)의 내용을 바꾸려면 다음 코드로 바꾸십시오.

function onhover(evt){ 
$('#evtTarget').toggleClass('highlighted'); 
$('#evtTarget').html("hover in!!"); 
} 


function onhoverout(evt){ 
$('#evtTarget').toggleClass('highlighted'); 
$('#evtTarget').html("hover out!!"); 
} 

$(function(){ 
    $('#evtTarget').hover(onhover,onhoverout); 
//below toggle is not suggested to use like this. 
    $('#evtTarget').toggle(func_1,func_2); 
}); 

' 메신저 잘못된 경우가 helps.correct 바랍니다. http://jsfiddle.net/NZjvJ/3/

.toggle() 쇼/소자가 숨겨 :

1

여기에 고정 된 버전이다. 나는 그것이 당신이 원하는 것이라고 생각하지 않습니다. 여기 http://api.jquery.com/toggle-event/

설명 된 기능은 현재 show()hide() 사이를 전환하는 기능으로 대체되었습니다로

function highlight(evt){ 
    $('#evtTarget').toggleClass('highlighted'); 
} 

function func_1(evt){ 
    if($('#evtTarget').html() !== 'CLICK!!') $('#evtTarget').html("CLICK!!"); 
    else $('#evtTarget').html("CLACK!!"); 
} 

$(function(){ 
    $('#evtTarget').hover(highlight,highlight); 
    $('#evtTarget').click(func_1); 
}); 
+0

은 아직 jsFiddle에 익숙하지 않았지만 실제로 유용하게 보입니다. 그 지적을위한 Thx! – RubenGeert

1

사용하려는 toggle() 기능을 사용합니다.

function highlight(evt){ 
    $('#evtTarget').toggleClass('highlighted'); 
} 
function func_1(evt){ 
    $('#evtTarget').html("CLICK!!"); 
    $('#evtTarget').unbind('click',func_1); 
    $('#evtTarget').click(func_2); 
} 

function func_2(evt){ 
    $('#evtTarget').html("CLACK!!"); 
    $('#evtTarget').unbind('click',func_2); 
    $('#evtTarget').click(func_1); 
} 
$('#evtTarget').hover(highlight,highlight); 
$('#evtTarget').click(func_1); 
+0

조금 혼란 스럽습니다 ...'func_1'의 정의 내에서'func_1'을 호출합니까? 순환 참조와 약간 다를 것인가? – RubenGeert

+0

@RubenGeert 예제 대신 내 코드가 작동합니다. 내가 뭘하고있는 건지 자체를 이벤트로 바인딩 해제하여 토글 함수를 복제하고 다른 함수를 다시 바인딩하는 것이다. – GoldenStake

+0

나는 네가 옳다는 것을 알 수있다. 그것은 나에게 조금 이상하게 보입니다. – RubenGeert

관련 문제