按钮上的onclick操作仅适用于一个条件

时间:2011-08-26 05:53:24

标签: javascript button onclick

我正在编写一个带有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";
                }
                            }
                    }
             }

您能否建议如何继续进行?

2 个答案:

答案 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>