2010-04-10 6 views
2

정확하게 형성되었다는 느낌을 받았지만 여기서 앵커 href로 이동합니다 (클릭해야 할 것은 무엇입니까?). 사용자가 취소를 선택했는지 여부 괜찮아.자바 스크립트에서 앵커가로드되지 않도록 확인하십시오.

<script type="text/javascript"> 
function myconfirm(my_string)             
{      
var agree = confirm('Are you sure you want to remove ' + my_string + '?'); 
if(agree)                  
{                    
    return true;                
}  
else                    
{                    
    return false; 
} 
}                      
</script> 

앵커

<a href="example.com/?remove=yes" onclick="myconfirm('my_string')">My String</a> 

답변

9

당신은 온 클릭 핸들러에서 아무것도 반환하지 것입니다.

onclick="return myconfirm('my_string');" 

또한 수행, 당신은 단축 할 수 절 단지

return agree; 

심지어 단지

return confirm('Are you sure you want to remove ' + my_string + '?'); 
-1

넣어 "자바 스크립트 : 무효 (0)"경우과 HREF는 다음 처리 필요한 경우 location.href 변경을 포함하여 onclick의 모든 항목.

+0

저는 개인적으로이를 피합니다. 링크가 (페이지에 링크되는) 최선의 일을하도록하고, 자바 스크립트 함수로 하여금 로직에만 초점을 맞추고, 결과가 거짓이면 이벤트가 전파되지 않게하십시오. 아래를 참조하십시오. – dannywartnaby

+0

그래서 개인적인 취향의 문제로 나를 downvote? 필자의 솔루션은 모든 브라우저에서 수 년 동안 작동하고 있습니다. – Robusto

+0

이 기술은 진정한 단점을 가지고 있습니다. JavaScript가 비활성화되어 있으면 아무데도가는 링크로 끝납니다.'javascript :'URL이 일반적으로 사용되지 않아야하는 이유에 대해서는 http://jibbering.com/faq/index.html#FAQ4_24를 참조하십시오. –

0

onclick에서 false를 반환하면 이벤트가 중지됩니다.

onclick="if(!myconfirm('my_string')) { return false; }" 

또는 단순히 : onclick에서

onclick="return myconfirm('my_string');" 
0

당신이해야 myconfirm반환 값 : onclick="return mycnfirm('my_string')". 그건 그렇고, 당신은 당신의 myconfirmconfirm의 결과를 반환 할 수 있습니다 :

function myconfirm(my_string) { 
     return confirm('Are you sure you want to remove ' + my_string + '?'); 
} 
2

마티의 권리를 뭔가를 반환해야 할 필요성에 대해. 그러나 :

<a href="example.com/?remove=yes" onclick="myconfirm('my_string')">My String</a> 

이에 대한 링크를 사용하지 마십시오. 제거와 같은 활성 효과가있는 양식은 GET이되는 양식 또는 링크가 아닌 method="post"이있는 양식이어야하며 제거 작업을 수행하는 서버 측 스크립트는 에만 POST 요청을 허용해야합니다.

표준 이외에 멱등 원하지 않은 행동에 대해 GET을 수락하면 다양한 amusing problems으로 이어질 수 있습니다.

당신은 그것이 버튼과 같은 보기을하지 않도록 당신이 정말로하고 싶은 경우, 버튼을 제출 양식 스타일을 지정할 수 있습니다

:

<form class="confirm" method="post" action="/remove" title="remove my string"><div> 
    <input type="submit" class="unbutton" value="My String" /> 
</div></form> 

.unbutton { 
    border: none; padding: 0; 
    background: transparent; color: blue; 
    text-decoration: underline; cursor: pointer; 
} 

또한 인라인 이벤트 핸들러를 사용하는 것을 피할 수는 할당하여 속성 JS :

// Find forms with confirm class and bind to them 
// 
for (var i= document.forms.length; i-->0;) 
    if (document.forms[i].className==='confirm') 
     document.forms[i].onsubmit= getConfirmation; 

// Prompt user to allow submission or not 
// 
function getConfirmation() { 
    return confirm('Are you sure you wish to '+this.title+'?'); 
} 
관련 문제