我正在编写一个带有javascript和自定义按钮的php应用程序。问题是当单击按钮时,无论单击是还是取消,它都会执行单击“是”的默认功能。你能不能帮我找到错误。
php代码是
<script type="text/javascript" language="javascript" src="javascript/access1.js"></script>
<form name="form_delete" id="form_delete" action="" method="POST" class="access">
|
|
|
<input type="hidden" name="deleteinstanceaction" value="1" />
</form>
<a id="_delete_btt" class="button" onClick="confirmDelete()">Delete</a>
<img class="ajaxload" style="display:none;" id="ajaxld" src="images/ajax-loader.gif"/>
EDIT1 javascript代码是
function confirmDelete() {
var agree=confirm("Are you sure you wish to continue? This will remove the selected item permamently!");
if (agree)
return true ;
else
return false ;
}
问题可能与AJAX有关吗? 如果我使用普通按钮,那么这个javascript工作正常在下面的例子中,这在“是”和“否”点击
上都可以正常工作<input type="submit" name="delete_state" value="Delete selected state" onClick="confirmDelete()">
EDIT2 .js文件中的代码是:
$(document).ready(function() {
Access.initEventHandlers(); });
var Access = {
initEventHandlers : function(){
if($('#_delete_btt')){
$("#_delete_btt").click(function(e){
Access.processSubmit();
});
}
processSubmit: function (event) {
$('#_delete_btt').hide();
$('#ajaxld').show();
setTimeout("Access.formsub()",500);
},
formsub: function () {
var url = 'php/corecontroller.php?ts='+new Date().getTime();
$.post(url, $('#form_delete').serialize(), Access.oncomplete,"json");
},
oncecomplete:function(data,textStatus){
if(textStatus == "success"){
if(data.result == "1"){
//sucessful
$('#ajaxld').hide();
htmlstr += "Deleted";
}
}
}
}
您能否建议如何继续进行?
答案 0 :(得分:0)
您是否有偶然附加到链接的点击处理程序?通常情况下,返回false确实会取消导航..但我不认为它会在附加时取消点击处理程序。
所以,如果你做了类似的事情......
$("#_delete_btt").click(submitTheForm);
或
document.getElementById('_delete_btt').onclick(submitTheForm)
在之前的一点,它可能仍然会提交表单,因为它没有从另一个绑定回调中监听“我可以继续”。假设是这种情况,将函数绑定到将确认的'a'标记,然后根据用户的响应进行处理。
编辑:
根据您发布的新代码,我们只需要更改程序流程。将确认放在点击回调中:
$("#_delete_btt").click(function(e){
if(confirmDelete()){
Access.processSubmit();
}
});
或将代码放在confirmDelete中处理提交:
function confirmDelete() {
var agree=confirm("Are you sure you wish to continue? This will remove the selected item permamently!");
if (agree){
Access.processSubmit();
return true ;
} else {
return false ;
}
}
无论哪种方式,我怀疑发生的事实上正在发生。无论回调是否返回false,click事件都会触发,导致processSubmit也会被触发。
答案 1 :(得分:0)
据我所知,如果定义了false
属性,则在Javascript中返回href
并不会阻止链接被跟踪。
由于情况不是这样,我会将href
属性设置为#
:
<a href="#" id="_delete_btt" class="button" onClick="confirmDelete()">Delete</a>