JS函数与PHP vars onclick在<a>标记不起作用
JS function with PHP vars onclick in <a> tag is not working
以下代码位于一个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;
-"#"
不会重新加载页面,它只会将页面移动到内部锚点所在的位置(如果您提供并指定了内部锚点)。
- <text区域>在我的html中包含event.keycode==13之后,wrap就不起作用了
- <选择>标签不起作用
- d3.tree=>转换似乎不起作用
- 寻呼<李>javascript不起作用
- jQuery在<TR>TR折叠时标签不起作用
- HTML5<视频>元素在Firefox、Opera和Safari中不起作用
- <标题>插入SVG的元素不起作用
- 可折叠<UL><李>不起作用
- 使用<选择>标记不起作用
- 我有一系列的处方受试者(a->B->C->a),但最后一步不起作用
- <JavaScriptFunction>在<RibbonDiffXml>不起作用
- <ul>显示内联块不起作用
- 逻辑“>"以及“<"在Jquery函数内部不起作用
- 扩展程序读取错误的数据 + gt>不起作用
- Titanium SDK:JavaScript->滚动功能不起作用
- JavaScript添加到书签在FF中不起作用>=23.0
- JS函数与PHP vars onclick在<a>标记不起作用
- HTML POST->重定向工作,XMLHTTPrequest->重定向不起作用(无法从null发出任何请求
- 另一个“;z索引不起作用”;在IE中>7、研究后找不到答案
- 角度模态>Ctrl+gt;服务>Ctrl继承不起作用