2011-11-30 2 views
0

나는 사실이 확인되면 true를 호출하려고하는데 javascript 함수가 있습니다. 원본 문서가 html이 아닌 .js 파일이기 때문에 document.write를 사용하고 있습니다.javascript document.write를 사용하여 동작 확인

실제 조건이 실행되기 전에 사용자가 카운터를 재설정하겠다고 확인하는 확인 메시지가 표시됩니다.

두 가지 시도가 있는데 첫 번째는 true를 반환하지만 true 조건에서는 resetCookie() 함수를 호출하지 않습니다.

두 번째 시도는 구문 상 올바르지 않습니다. 아무 것도하지 않는 것 같습니다.

1 차 시도 :

document.write('<a href="" onclick="return alert(confirm(\'sure?\'));{resetCookie()}{};"><i>Reset counter</i></a>'); 

2 차 시도 :

document.write("<a href='javascript: if (confirm('Continue?')) { alert('You chose true') } else { alert('You chose false.') }; void('')'>Reset counter</a>"); 

도움 주셔서 감사합니다.

+0

나는 당신의 요점을 찾지 못했습니다. 당신의 문제는 무엇입니까, 당신은 당신의 시도가 어떻게 작동하지 않는지 가장 좋은 방법인지 알고 싶습니다. ?? –

+1

페이지가 완성되면 페이지에서'document.write()'를 사용할 수 없습니다. 그렇게하면 암시 적으로 페이지가 삭제됩니다. – Pointy

+0

@Pointy : 코드가'.js' 파일이든 인라인'script'이든 상관 없습니다. 그 모든 것들은'document.write'가 * 후에 페이지가 파싱되는 동안 이루어 졌는지 여부입니다. –

답변

3

왜 jscript confirm() 함수를 사용하지 않으시겠습니까?

if (confirm("sure?") == true){ 
    resetCookie(); 
} 

BTW, 당신의 태그가 잘못 (이미 실행 때 나는 당신이 document.write를 사용할 수 없습니다 것을 지금은 무시됩니다) :

document.write('<a href="" onclick="if(confirm(\'sure?\')){resetCookie()};return false;"><i>Reset counter</i></a>'); 
+0

그게 성취 될 것인가? 그 태그에 빈 href 속성이있어서 아무데도 가지 않습니다 (페이지를 다시로드하는 것 제외). – Leon

+0

레온, 고마워요. – jamesTheProgrammer

+0

@ Leon : +1 문제를 해결하는 좋은 직장. 참고 : 코드가'.js' 파일에 있기 때문에 초기 페이지로드 후에 코드가 발생한다는 것을 의미하지는 않습니다. 외부에서'document.write'를 사용할 수 있습니다.js' 파일을 인라인'script'와 같이 사용할 수 있습니다. –

1

당신은 견적 스타일에주의를 기울여야한다 - 당신은 당신이 탈출하지 않고 다시 사용할 수 없습니다 ' sinle 견적을 열면,이 시도 :

document.write("<a href='javascript:(confirm(\"continue?\") ? alert(\"true\") : alert(\"false\"))'>Reset counter</a>"); 
1

이 자바 스크립트 파일 인라인을 포함하고 가정이 코드를 가정하고 즉시 실행 (예를 들어, 그것은 내가 아니다 n 페이지가로드 된 후에 실행되는 함수 호출) 일반적으로는 피할 수 있지만 document.write을 사용할 수 있습니다.

나는 또한 DOM0 (onclick 스타일) 처리기에 어떤 종류의 로직도 넣는 것을 피합니다. 현대적인 방법으로 당신이 전역 함수를 만드는 피할 수 있기 때문에, 이상적으로

document.write('<a href="" onclick="return confirmLink();"><i>Reset counter</i></a>'); 
function confirmLinkClick() { 
    if (confirm("sure?")) { 
     resetCookie(); 
    } 
    return false; 
} 

완전히 dom0이 핸들러를 방지하고 클릭을 접선의 현대적인 방법을 사용하는 대신, 함수를 호출합니다. 이는 addEventListener (최신 브라우저) 또는 attachEvent (IE8 이하)을 사용하거나 좋은 라이브러리를 사용하여 이러한 차이점에 대해 걱정할 필요가 없다는 것을 의미합니다.

+0

TJ, 나는 당신의 생각을 좋아해요. 나는 당신이 제안하고있는 것을 요지대로 이해하기 위해 몇 번 읽어야했습니다. 감사 – jamesTheProgrammer

관련 문제