2009-11-13 7 views
2

여기 제가 지금 여러 해 동안 사용해온 것입니다. 그리고 갑자기 이러한 이상한 행동을 보았을 것입니다. 누군가 그 이유를 알고 있을까요?매우 비정상적인 JavaScript 동작

다음
<div class="tooltip" id="tooltip"></div> 

<input type="button" name="hide" value="hide" onclick="hide('tooltip');" /> 
<input type="button" name="show" value="show" onclick="show('tooltip');" /> 

는 HTML 코드 아래의 자바 스크립트입니다 :

<script type="text/javascript"> 
     function hide(id) 
     { 
      document.getElementById(id).style.display = 'none'; 
     } 
     function show(id) 
     { 
      document.getElementById(id).style.display = ''; 
     } 
    </script> 

지금이 코드와 아무 잘못도 안 여기 내 HTML입니다. 각 버튼 클릭시 툴팁을 숨기거나 표시해야합니다. 이상한 일은 내가 숨기는 버튼을 클릭 할 때 발생합니다. 그리고 내가 쇼를 클릭하면 아무 일도 일어나지 않습니다. 숨기기가 아직 숨겨져 있습니다.

비슷한 문제가 있습니까? 거기에 대한 해결 방법이 있습니까? 똑같은 것을 달성하기위한 또 다른 접근법 (순수한 JavaScript)?

업데이트 : 블록을 변경했지만 여전히 작동하지 않습니다. 왜 그 버튼에 연결되어 있지 않을 때 클릭하는 버튼을 숨길 수 있습니까? 나는 최신 Firefox를 사용하고 있습니다. 그리고 같은 일에 경고를 더했습니다. 여기에 다시 작성 코드 :

function hide(id) 
{ 
    alert(id); 
    document.getElementById(id).style.display = 'none'; 
} 
function show(id) 
{ 
    alert(id); 
    document.getElementById(id).style.display = 'block'; 
} 
+0

w3 유효성 검사기 (http://validator.w3.org/)를 읽고 마크 업이 유효한지 확인한 후 다시 돌아와서 알려주십시오. –

+2

답변을 수락 한 것으로 표시했습니다. 무엇이 결국 그것을 해결 했습니까? –

+0

예,이 게시물은 해결책이었습니다. – ant

답변

4

제대로 작동하지 않게하는 것은 분명하지 않습니다. 어떤 유형의 오타, 닫히지 않은 태그 또는 함수 등이있는 것으로 추측하고 있습니다. 두 함수 모두에 alert()을 추가하여 함수가 제대로 호출되는지 확인하십시오.

편집 : 질문에 대한 최근 편집 내용을 토대로, 동일한 ID가있는 페이지에 다른 항목이있는 방향으로 기울어 져 있습니다. this question을 참조하십시오.

한가지 시도 : 당신의 show 기능에서 display 속성을 설정 한 후, 그것을 실제로으로 설정된 것을 확인하기 위해 display 재산상의 alert을 시도해보십시오

alert(document.getElementById(id).style.display); 
0

당신은 블록에 다시 표시 유형을 설정해야합니다

<script type="text/javascript"> 

       function hide(id) 
       { 
       document.getElementById(id).style.display = 'none'; 
       } 
       function show(id) 
       { 
       document.getElementById(id).style.display = 'block';     
       } 

    </script> 
+0

OP 스크립트는 파이어 폭스 3.5에서 저에게 효과적이었습니다.하지만 실제로 수석 코코넛과 같은 display = "bock"을 사용하면됩니다. –

+0

아니요, 그는 그렇지 않습니다. –

2

작품을 완벽하게 정상적으로 난 당신의 코드를 붙여 구글 크롬에로드 복사 할 때. 원본 페이지에 오타가있을 수 있습니다.

+0

Jauco, 아니요. 여기에 복사/붙여 넣기하지 마십시오. – ant

+0

예, 페이지 전체에서 의미가 있습니다. 잘못 중첩 된 태그 또는 동일한 ID를 가진 다른 항목과 같습니다. 받아 들여진 응답에서 나는 마지막 하나가 사실 이었다는 것을 모인다. – Jauco

1

내가 디스플레이의 반대 = "없음"디스플레이 = "인라인"또는 표시하지 않을 것이다 생각 = 당신이 원하는 방법에 따라 "블록"내가이 특히 아무 잘못 표시되지 않습니다

+0

'display = '''잘 작동 할 것입니다. 그것은 'display'속성을 지정하지 않는 CSS 규칙 ('display ='none '을 설정하는 경우에 비해)과 같습니다. –

+0

시도한 블록이 작동하지 않습니다. m8 – ant

1

를 표시합니다 코드를 작성해야하지만 show 함수에서 display를 'block'으로 설정하려고 할 수 있습니다.

0

당신은 아마 전환 할을 다른 사람들이 주목 한 것처럼 그것을 보여줄 때 '차단'하라. 그 외에도 기본적으로 숨겨져 있다면 인라인 스타일로 숨겨져 야합니다. 외부 CSS 파일에 코드를 숨겨서 숨기면 javascript로 다시 표시 할 수 없습니다.

+0

테스트 케이스 설명에 따라 다르지만, 전혀 발생하지 않습니다. 그럼별로 신경 쓰지 마라. –

1

나는 ID가 "툴팁"인 두 가지 요소가 있다는 것을 내기 할 것입니다.

+0

그러면 getElementById()는 호출 될 때마다 동일한 값을 반환해야합니다. 결국 결정적입니다 :) – Abgan

+0

Pekka : tooltip1987로 변경 했으므로 아직 작동하지 않습니다. 우리는이를 차단할 수 있습니다 .. – ant

0
  1. 확인 display='block' 일이 있음 - 어쩌면 당신의 CSS 클래스 .tooltip에 대한 display='none'을 지정?을 사용하여 코드를 테스트하거나 show() 함수에서 일부 디버거를 사용하고 중단 점을 설정하십시오.

+0

차단하도록 설정했는지 확인하고, 통행료 징수 시스템에는 높이, 너비 및 배경 만 표시되지 않습니다. 설정 – ant

0

코드가 작동한다고 생각합니다. 그러나 당신의 너무 좋은 DIV에는 아무것도 들어 있지 않아 DIV가 표시되지 않는다고 생각하는 이유입니다.

그냥 DIV에 글을 씁니다.

그리고 두 번째 부분은 숨기기 버튼을 클릭하면 숨을 끕니다. 코드에 보이는 것처럼 불가능할 것 같습니다.

0

Firefox를 사용하고 있으므로 Firefox의 '오류 메시지 콘솔'을 확인할 수 있습니다. 도구를 열고 거기에서 선택하십시오. 여기에서 자바 스크립트가 실패하면 어디에서 실패했는지 알 수 있습니다.

0

닫는 중괄호 바로 뒤에있는 함수 블록의 끝에 세미콜론을 넣을 수 있습니다.

내가 없으면 제 기능이 제대로 작동하지 않고 매우 비정상적인 행동을하는 것으로 나타났습니다.

관련 문제