带有PHP变量onclick in的JS函数<;a>;标签不起作用

带有PHP变量onclick in的JS函数<;a>;标签不起作用,php,javascript,html,onclick,Php,Javascript,Html,Onclick,以下代码位于单个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?"

以下代码位于单个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>';
}
?>

函数pipeDelete(topicid、msgid、action){
if(topicid==0){
var ans=确认(“删除主题?”);
}否则{
var ans=确认(“删除此评论?”);
}
如果(ans){
var dest='msg_transact.php';
$.post(dest,{topicid:topicid,msgid:msgid,action:action},function(){
$(“#”+msgid).hide(“slow”);
});
}
}
问题是,当我单击“删除”链接时,页面只是重新加载(“#”附加在URL的末尾),什么也没有发生。onclick事件不会运行,也不会调用该函数。我不认为jquery或//某些代码会造成干扰,因为要做到这一点,我至少应该得到组合框,不是吗

调用JS函数时停止onclick事件的问题是什么

解决方案:编写两个单独的脚本标记——一个用于jquerysrc,另一个用于js代码。
/*javascript code*/

onclick
需要“
返回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>';
}
?>

$('.deletelink')。单击(函数(e){
e、 预防默认值();
var topicid=$(this.attr('data-row')、msgid=$(this.attr('data-msg')、action=$(this.attr('data-action');
if(topicid==0){
var ans=确认(“删除主题?”);
}否则{
var ans=确认(“删除此评论?”);
}
如果(ans){
var dest='msg_transact.php';
$.post(dest,{topicid:topicid,msgid:msgid,action:action},function(){
$(“#行-”+msgid).hide(“slow”);
});
}
}); 

请参见与在

上生成的伪html相对应的示例,单击
需要“
返回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>';
}
?>

$('.deletelink')。单击(函数(e){
e、 预防默认值();
var topicid=$(this.attr('data-row')、msgid=$(this.attr('data-msg')、action=$(this.attr('data-action');
if(topicid==0){
var ans=确认(“删除主题?”);
}否则{
var ans=确认(“删除此评论?”);
}
如果(ans){
var dest='msg_transact.php';
$.post(dest,{topicid:topicid,msgid:msgid,action:action},function(){
$(“#行-”+msgid).hide(“slow”);
});
}
}); 
请参见与在两个选项上生成的伪html相对应的示例:

“#”
替换为
“javascript:pipeDelete(..”
,并删除onclick属性或通过jquery添加click事件,这样可以防止默认行为

例如:

两种选择:

“#”
替换为
“javascript:pipeDelete(..”
,并删除onclick属性或通过jquery添加click事件,这样可以防止默认行为

例如:

问题在于:

$("#" + msgid + "\"").hide("slow");
改为:

$("#" + msgid).hide("slow");
$row['msg_id'] . '\', \'deletepost\')">Delete</a>';
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
在这里:

$row['msg_id'] . '\', \"deletepost\")">Delete</a>';
$row['msg\u id'.\'\“deletepost\”>删除“;
改为:

$("#" + msgid).hide("slow");
$row['msg_id'] . '\', \'deletepost\')">Delete</a>';
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
$row['msg\u id'].\',\'deletepost\')>Delete';
在这里:

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

改为:

$("#" + msgid).hide("slow");
$row['msg_id'] . '\', \'deletepost\')">Delete</a>';
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">

见:

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

问题在于:

$("#" + msgid + "\"").hide("slow");
改为:

$("#" + msgid).hide("slow");
$row['msg_id'] . '\', \'deletepost\')">Delete</a>';
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
在这里:

$row['msg_id'] . '\', \"deletepost\")">Delete</a>';
$row['msg\u id'.\'\“deletepost\”>删除“;
改为:

$("#" + msgid).hide("slow");
$row['msg_id'] . '\', \'deletepost\')">Delete</a>';
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
$row['msg\u id'].\',\'deletepost\')>Delete';
在这里:

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

改为:

$("#" + msgid).hide("slow");
$row['msg_id'] . '\', \'deletepost\')">Delete</a>';
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">

见:


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

我尝试了这个方法
onclick=“pipeDelete();return false;”
但这也不起作用……锚不重新加载页面-不需要return false。如果我不编写
return false
,页面URL在末尾附加了#,没有其他情况发生。在您的示例中,您编写了
onclick=“return false;pipeDelete(…)
这显然是不对的。谢谢你!但是在你新编辑之前我已经解决了这个问题。问题只是我在
/*代码、函数*/
中编写了JS代码,这是错误的。问题是通过分别编写两个脚本标记来解决的,一个用于jquery src,另一个用于代码,就像你在编辑中写的一样。:-)我尝试了这个方法.
onclick=“pipeDelete();返回false;“
但这也不起作用…锚不重新加载页面-不需要return false。如果我不编写
return false;
,页面URL将在末尾附加#,而不会发生任何其他情况。在您的示例中,您编写了
onclick=“return false;pipeDelete(…)
这显然是不对的。谢谢你!但是我已经在你的新编辑之前解决了这个问题。问题只是我在
/*代码、函数*/
中编写了JS代码,这是错误的。通过编写两个单独的脚本标记解决了这个问题,一个用于jquery src,另一个用于代码,就像您在编辑中所写的那样。:-)第二个方法,我应该在标签中的pipeDelete()中写入吗?如果是的话,所有的代码都会在//do stuff中?第一个方法,用#替换时,什么都不会发生,页面甚至不会重新加载。第二个方法,我应该在标签中的pipeDelete()中写入吗?如果是,所有的