JS函数与PHP vars onclick在<a>标记不起作用

JS function with PHP vars onclick in <a> tag is not working

本文关键字:gt 不起作用 函数 lt vars PHP onclick JS      更新时间:2023-09-26

以下代码位于一个PHP文件中:

<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事件的问题是什么?

解决方案:编写两个单独的脚本标记——一个用于jquery-src,另一个用于js代码。<script type="text/javascript" src="jquery.js"></script> <script type="text/javascript">/* javascript code */</script>

onclick需要"return false"来阻止默认操作(在#anchor之后)


现在,您似乎正在使用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>';
}
?>

请参阅与此jsfiddle 上生成的伪html相对应的示例

两个选项:

"javascript:pipeDelete(..)"替换"#",并删除onclick属性或通过jquery添加click事件,在jquery中可以防止默认行为。

例如:

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

问题在这里:

$("#" + msgid + "'"").hide("slow");

更改为:

$("#" + msgid).hide("slow");

这里:

$row['msg_id'] . ''', '"deletepost'")">Delete</a>';

更改为:

$row['msg_id'] . ''', ''deletepost'')">Delete</a>';

这里:

<script type="text/javascript" src="jquery.js">

更改为:

<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">

请参阅:http://jsfiddle.net/AUTrX/

您不需要更改"#"return false;-"#"不会重新加载页面,它只会将页面移动到内部锚点所在的位置(如果您提供并指定了内部锚点)。