2012-03-25 1 views
0

다음 코드는 하나의 PHP 파일에 있습니다JS 기능은 <a> 태그에 onclick을 바르 작동하지 않습니다

<head> 
<script type="text/javascript" src="jquery.js"> 
function pipeDelete(topicid, msgid, action) { 
    if (topicid == 0) { 
    var ans = confirm("Delete the topic?"); 
    } else { 
    var ans = confirm("Delete this comment?"); 
    } 
    if (ans) { 
    var dest = 'msg_transact.php'; 
    $.post(dest, {topicid:topicid, msgid:msgid, action:action}, function() { 
    $("#" + msgid).hide("slow"); 
      }); 
    } 
} 
</script> 
</head> 
<?php 
// some code, $row['topic_id'] and $row['msg_id'] are integers 
while ($row = mysql_fetch_assoc($result)) { 
    // some code 
    echo '<div id="' . $row['msg_id'] . '">'; 
    $deletelink = '<a href="#" onclick="pipeDelete(\'' . $row['topic_id'] . 
    '\', \'' . $row['msg_id'] . '\', \'deletepost\')">Delete</a>'; 
    // some code 
    echo $deletelink; 
    echo '</div>'; 
} 
?> 

문제는, 나는 "삭제"링크를 클릭 페이지 바로 다시로드입니다 ('#'은 URL 끝에 추가됩니다) 아무 일도 일어나지 않습니다. onclick 이벤트가 실행되지 않고 함수가 호출되지 않습니다. 나는 jquery 또는 // 일부 코드이 발생한다고 생각하지 않는다. 왜냐하면 적어도 나는 콤보 박스를 가져야 만하기 때문이다.

JS 함수를 호출 할 때 onclick 이벤트를 중지하는 문제는 무엇입니까?

해결 방법 : 2 개의 별도 스크립트 태그를 작성하십시오. 하나는 jquery src이고 다른 하나는 js 코드입니다. <script type="text/javascript" src="jquery.js"></script> <script type="text/javascript">/* javascript code */</script>

답변

2

onclick 는 "return false는"


이제, 당신이 jQuery를 사용하고있는 것 같다 (거기 # 앵커 다음) 기본 동작을 방지 할 필요가있다. 그렇다면 html5를 사용한다고 가정 할 때 비 침투성 코드를 만드는 것이 어떻겠습니까?

대체 : :) ID가 HTML

<head> 
<script type="text/javascript" src="jquery.js"></script> 
<script type="text/javascript"> 
    $('.deletelink').click(function(e){ 
    e.preventDefault(); 
    var topicid = $(this).attr('data-row'), msgid = $(this).attr('data-msg'), action = $(this).attr('data-action'); 
    if (topicid == 0) { 
    var ans = confirm("Delete the topic?"); 
    } else { 
    var ans = confirm("Delete this comment?"); 
    } 
    if (ans) { 
    var dest = 'msg_transact.php'; 
    $.post(dest, {topicid:topicid, msgid:msgid, action:action}, function() { 
    $("#row-" + msgid).hide("slow"); 
      }); 
    } 
    }); 
</script> 
</head> 
<?php 
// some code, $row['topic_id'] and $row['msg_id'] are integers 
while ($row = mysql_fetch_assoc($result)) { 
    // some code 
    echo '<div id="row-' . $row['msg_id'] . '">'; 
    $deletelink = '<a href="#" data-row="' . $row['topic_id'] . '" data-msg="' . $row['msg_id'] . '" data-action="deletelink" class="deletelink">Delete</a>'; 
    // some code 
    echo $deletelink; 
    echo '</div>'; 
} 
?> 

만 수치를 안된다는

주 의사 HTML this jsfiddle

+0

나는 이것을 시도했다. 'onclick = "pipeDelete(); false false;" 그러나 그 중 하나가 작동하지 않았습니다 ... – Ajinx999

+0

앵커가 페이지를 다시로드하지 않습니다. false를 반환 할 필요가 없습니다. – evan

+0

'return false;'를 쓰지 않으면 끝에 페이지 URL이 추가되고 아무 것도 나타나지 않습니다. – Ajinx999

1

두 가지 옵션 생성과 corrsponding 예를 참조하십시오 "#""javascript:pipeDelete(..)"으로 변경하고 onclick 특성을 제거하거나 기본 동작을 방지 할 수있는 jquery를 통해 click 이벤트를 추가하십시오.

E.g :

$('#button').click(function(e){ 
    // do stuff 
    .... 
    e.preventDefault(); // prevents the default behaviour of a link 
}); 
+0

두 번째 방법은 내가 그 안에서 쓸 수