2010-12-17 4 views
4

스타일을 변경하려면 onClick 이벤트가 있습니다. 사용자가 항목의 다른 곳을 클릭 할 때 스타일을 다시 변경하는 방법은 무엇입니까?다른 곳에서 클릭 이벤트가 발생 했습니까?

프로토 타입 및 scriptaculous 라이브러리가 모두 포함되어 있습니다. 아래 답변 중 많은 부분이 작동하지 않습니다 ... 또한 요소의 ID는 정의되지 않으므로 자바 스크립트에서 참조 할 수 없습니다. 항목이 그것을 클릭하면

감사합니다, 얀

+0

사용 jQuery의 전환을 바꿀 것입니다 있는지 확인합니다

var elsewhere = 1; $(myelement).bind('hoverin',function(){ elsewhere = 0; }); $(myelement).bind('hoverout',function(){ elsewhere = 1; }); $('screenarea').click(function(){ if(elsewhere){ change-style-back(); } else{ change-style(); } }); 

내 방식. – RPM1984

답변

3

내가 가진 모든 브라우저에서이 테스트,하지만 당신은 새로운 JS 프레임 워크를 도입하지 않으려는 경우,이 솔루션은 CSS를 사용

<ul> 
    <li tabindex="1">First</li> 
    <li tabindex="2">Second</li> 
</ul> 

속성이 tabIndex은 리튬 요소 FO한다 cusable. 그리고 css :

li { color: #F00; } 
li:focus { color: #0F0 } 

이것은 물론 매우 기본 스타일링입니다. 아마도 수업에 넣기를 원할 것입니다.

+0

좋은 답변이지만 IE8 이상에서만 지원됩니다. – Paddy

+0

아, 잘 알고 있습니다. Chrome에서만 직접 테스트했습니다. – DanneManne

0

나는 그것이 포커스를 얻어, :not selector

+0

이미 프로토 타입을 사용하고 있습니다. 물건을 엉망으로 만들고 싶지 않습니다 ... – Yan

2

사용하여 jQuery를 라이브 이벤트와 바인드 클릭 이벤트를 사용할 수 있습니다. 다른 것을 클릭하면 포커스를 잃고 onblur 이벤트가 발생합니다. 모든 요소에서 작동하지는 않지만, 예를 들어 <input> 요소에서 작동합니다.

+0

"li"요소가 없습니다. http://jsbin.com/ojohe5/ – Yan

2

큰 질문입니다!

if (event.target === myElement) { 
    changeStyle(); 
} else { 
    changeStyleBack(); 
} 
: 당신은 대신 요소에 onclick 이벤트, 당신이 더 높은 개체에 대한 이벤트 핸들러를 정의하는 것을 의미한다 "이벤트가 버블 링"를 사용할 수 있습니다 (예를 들어, document 또는 table), 거기 당신은 무언가 같이 말한다

자세한 내용은 여기 (다른 곳에서) : http://www.southsearepublic.org/tag/Javascript%20Event%20Bubbling/read

1

당신은 onblur 이벤트를 원하는 : "개체가 포커스를 잃을 때 onBlur 이벤트가 발생합니다."

+0

"li"요소에 대해 작동하지 않습니다. http://jsbin.com/ojohe5/ – Yan

+0

나는 이것이 최상의 솔루션이라고 말하지는 않지만, li 요소에 tabIndex를 설정하면 포커스가 가능합니다. – DanneManne

0

태그에 onclick="function1()" onblur="function2()" 또는 onfocus="function1()" onblur="function2()"을 사용해보세요. 여기

+0

onblur가 작동하지 않습니다 ... – Yan

+0

아직 : http://jsbin.com/ojohe5/ – Yan

0

당신이 jQuery를에 그것을 할 수있는 방법은 다음과 같습니다

$(document).click(function(e) { 
    if ($(e.target).is("#specialItem")) { 
    $(e.target).addClass("specialClass"); 
    } else { 
    $(#specialItem").removeClass("specialClass"); 
    } 
}); 

당신이 jQuery를 사용하지 않는 경우, 당신은 여전히 ​​기본 모델을 사용할 수 있습니다 - 문서 수준에서 onclick 이벤트 논리를 적용 할 수 있습니다. 이것은 blur 이벤트에 응답하지 않는 항목에 대해 작동합니다.

+0

하지만 이건 특정 ID에 바인딩됩니까? 동적 목록이 있으므로 이드를 모른다. – Yan

+0

#specialItem을 코드에 필요한 것으로 변경하면된다. –

1

body에서 onClick 이벤트를 바인딩하고 해당 이벤트에 스타일을 복원하는 함수를 할당 할 수 있습니다.

가 내가 프로토 타입을 사용 했으므로 꽤 오랜 시간이되었습니다 http://jsbin.com/oxobi3

+0

href가 없으면 어떻게 될까요? http://jsbin.com/oxobi3/2/ – Yan

+0

몇 가지 사항을 변경했습니다. http://jsbin.com/oxobi3/3 – Kevin

+0

실제로 jsbin.com/oxobi3/2에서는 "a.link"에서 "li.link"로 셀렉터를 변경하고 폭 값을'li'로 설정하면됩니다. 'body '를 클릭 할 수있게합니다. – Kevin

0

에서 라이브 예제하지만 난이 당신을 도움이되기를 바랍니다 (비의 jQuery 의미에서.)

$(window).observe('click', respondToClick); 

function respondToClick(event) { 
var element = event.element(); 
if(!($(this) == element)){ 
    element.addClassName('active');//or do your stuff here 
} 


} 
0

이 당신이 화면에 어딘가에 클릭하고 아닌 요소에 때, 다음 스타일이 다시

관련 문제