질문/조언질답게시판

<a  href="#" onclick="doCallModuleAction('document','procDocumentVoteUp','{$oDocument->document_srl}');return confirm('진행하시겠습니까?')">추천</a>

 

 

이 경우는 a 태그의 href를 실행할지의 confirm으로 동작하는 것 같습니다.

저 코드대로 해보면 컨펌창에서 예,아니오와 상관없이 추천이 이루어지는데요.

 

onclick이 가진 값 자체를 conffirm 할 수 있나요 ?

  • ?
    <a href="#" onclick="confirm('진행하시겠습니까?') ? doCall(~~) : false;">추천</a> 로 사용하시면 됩니다.

    onClick 내에서 if 문을 사용하시면 됩니다만, 길게 사용하는건 싫으신 것 같으니...
    (조건문 : true일때 ? false일때) 형식으로 사용하시면 됩니다.
  • ? profile
    예를 눌러도 그냥 추천 없이 # 링크가 동작합니다.
  • ?
    <a href="#" onclick="confirm('진행하시겠습니까?') ? doCallModuleAction('document','procDocumentVoteUp','{$oDocument->document_srl}') : false;">추천</a>

    를 그대로 복사해서 사용해 보세요
  • ? profile
    아.. 제가 댓글을 살짝 잘못 이해했네요. 수정하고 잘 됩니다.
    한가지만 더 여쭐께요. 원래 return false; 요거로 # 링크 동작 안하게 했었는데 이것 까지 예전처럼 하려면 어떻게 추가해야 하나요?
  • profile
    아.. 아래 댓글에 세미콜론이 동작 순서라하는 것을 보고 마지막에 다시 ;return false; 추가해줬더니 잘 되네요.
  • profile profile
    쓸데없이 길게 써보면

    a태그 내에 onclick이 있으면 onclick이라는 게 "클릭을 할때"이니 먼저 onclick의 내용이 실행되죠.
    href는 "클릭하면" 이므로 실행 순서가 다음이 됩니다.

    onclick에는 여러 줄의 명령이 들어갈수도 있는데 명령줄의 마침에는 세미콜론이 들어가요.
    한줄의 명령만 있으면 생략해도 되지만 여러줄이면 무조건 들어가야 해요.
    예외가 있는데 중괄호로 쌓인 경우의 끝이죠. if문 같은.

    onclick이 실행되는데 마지막에 return false가 실행된거에요.
    return은 어떤 값을 반환하라는 것이고
    false는 거짓이죠.
    href를 실행하기 직전에 onclick이 false를 보내준거에요.
    false는 거짓이므로 href를 실행하지 않게 된거죠.

    #은 문서 내의 이름을 의미해요.
    문서 중간에 <a name="abc"></a> 이런 부분이 있고
    href안에 링크를 #abc로 하면 해당 위치까지 스크롤이 되죠.
    그런데 이름이 없는 #을 하면 그 문서 자체를 의미해요.
    그래서 <a href="#"></a>를 하면 새로고침이 되는 거죠.

    a태그 안에 onclick을 사용해서 자바스크립트를 실행할 때 마지막에 false를 return해주지 않으면 href가 #을 받아들이면서 새로고침을 하게 되요.

    그래서 href안에 javascript://를 넣은 거죠.
    저걸 넣으면 아예 새로고침을 하지 않거든요.
  • profile profile
    자세한 설명 감사합니다. href 값을 javascript:// 넣는 것도 방법이 군요. 감사합니다.
  • profile
    자바스크립트는 순서대로 실행하고, 세미콜론이 명령의 끝을 의미합니다.
    본문대로 작성하면
    1단계 추천
    2단계 confirm 실행인거죠.

    일단 #은 javascript:// 으로 바꾸시구요.
    #은 브라우저에 따라서 새로고침을 하기도 합니다.
    물로 새로고침이 필요하면 그대로 두구요.

    onclick에서 스크립트를 다 실행하지 말고 분리하시는 것이 나아보입니다.

    <a href="javascript://" onclick="vote_action();">추천</a>

    <script>
    function vote_action()
    {
    var result = confirm("진행하시겠습니까?");
    if(result == true) {
    doCallModuleAction('document','procDocumentVoteUp','{$oDocument->document_srl}');
    return;
    } else {
    }
    }
    </script>

    다만 걱정되는 것이 doCallModuleAction이 xe문법일텐데 자바스크립트 안에서 동작을 안할수도 있습니다.
    그렇게 되면 그냥 onclick안에다가 다 때려 넣어야죠.

    <a href="javascript://" onclick="var result = confirm("진행하시겠습니까?"); if(result == true) { doCallModuleAction('document','procDocumentVoteUp','{$oDocument->document_srl}'); return; }">추천</a>

    요렇게요.
  • profile
    @정김정 @Double'U' 두분 감사합니다. https://xetown.com/rxe_tip/955069 요거 하려고 질문 올렸습니다. ㅋ