Javascript 动态更改href jquery的onclick功能

Javascript 动态更改href jquery的onclick功能,javascript,jquery,anchor,Javascript,Jquery,Anchor,我有一个javascript函数(用来保存表单值)已经在一个公共js文件中全局定义,现在我需要根据某些条件使用一些其他功能来覆盖它。是否有任何方法可以将javascript函数动态附加到a href onclick?我试过这种方法,但不起作用。有人能帮我吗 父html: <a href="#" onclick="Save();" id="SaveLink"/> My child html调用ValidateForm函数(在Common.js中提供)来验证表单 如果无效,则停止调用g

我有一个javascript函数(用来保存表单值)已经在一个公共js文件中全局定义,现在我需要根据某些条件使用一些其他功能来覆盖它。是否有任何方法可以将javascript函数动态附加到a href onclick?我试过这种方法,但不起作用。有人能帮我吗

父html:

<a href="#" onclick="Save();" id="SaveLink"/>
My child html调用ValidateForm函数(在Common.js中提供)来验证表单 如果无效,则停止调用global Save()函数

function ValidateForm()
{
    var responseValid = false; //false for now
    if (!responseValid)
    {
        $("#SaveLink").on("click", function (e) {
            alert("This response is not valid");
            return false;
        });
    }
    else
    {
        $("#SaveLink").on("click", "Save();"); //call the global Save function
    }
}
更新代码:

function ValidateForm()
{
    var responseValid = false; //false for now
    if (!responseValid)
    {
        //$("#SaveLink").prop("onclick", null);
        $("#SaveLink")[0].onclick = null;
        $("#SaveLink").on("click", function (e) {
            alert("This response is not valid");
            return false;
        });
    }
    else
    {
        //call the global Save function
        //$("#SaveLink").prop("onclick", null);
        $("#SaveLink")[0].onclick = null;
        $("#SaveLink").on("click", function (e) {
            Save();
            e.preventDefault();
        });
    }
}

您应该传递函数处理程序,而不是字符串:

 $("#SaveLink").on("click", Save);
编辑:

function ValidateForm()
{
    var responseValid = false; //false for now
    if (!responseValid)
    {
        //$("#SaveLink").prop("onclick", null);
        $("#SaveLink")[0].onclick = null;
        $("#SaveLink").on("click", function (e) {
            alert("This response is not valid");
            return false;
        });
    }
    else
    {
        //call the global Save function
        //$("#SaveLink").prop("onclick", null);
        $("#SaveLink")[0].onclick = null;
        $("#SaveLink").on("click", function (e) {
            Save();
            e.preventDefault();
        });
    }
}
要防止在页面中单击
onclick
,您应该在DOM就绪事件中删除它。例如:

$( function() {
    $( '#SaveLink' )[ 0 ].onclick = null;
});

您需要删除
onclick
事件

function ValidateForm() {
    var responseValid = false; //false for now
    if (!responseValid) {

        //Remove onclick attribute
        $("#SaveLink").removeAttr('onclick');
        //OR
        $("#SaveLink").prop("onclick", null);

        $("#SaveLink").on("click", function (e) {
            alert("This response is not valid");
            return false;
        });
    } else {
        //call the global Save function
        $("#SaveLink").on('click', Save);
    }
}

JQuery代码:
$.Save=函数(id)
{
//通过使用id,您可以应用您的条件
}

单击“仅调用保存功能”

感谢您的回复。但由于某些原因,在成功场景中,它首先警告“此响应无效”,然后调用Save函数。这似乎很奇怪。请尝试
$(“#SaveLink”).prop(“onclick”,null)
要删除onclick事件,我也尝试了prop,但仍然调用了alert,然后在成功场景中调用了Save函数。很抱歉,我无法更改全局函数,因为许多其他html页面都在使用相同的函数,我只能覆盖它。您是否已从html中删除了
onclick
?如果是,并且您已经替换了代码来挖掘,那么一切都应该正常工作。我无法从Html页面删除onclick,因为它被许多其他页面使用,这就是为什么我试图在公共js中覆盖需要额外验证的子Html。同样的问题也会发生(即)在成功场景中,在保存功能之前会调用此警报。否-否我的意思是您应该在页面加载时设置
onlcik
,而不是在
ValidateForm
函数内。假设此代码将在DOM就绪时执行,则它应该是最高级的。尝试在
函数ValidateForm()
之前添加我的全部代码,但如果这样做,全局保存功能将被删除,对吗?很抱歉,我无法修改全局函数
<a href="#"  id="SaveLink" onclick="$.Save(this.id);"/>

 JQuery Code:
 $.Save=function(id)
 {
  //by using id you can apply your conditions 
  }
function ValidateForm()
{
    var isSave= true; 
    //do your form validation
    if(validation fail)  //if validation fail set isSave is false
       isSave=false;
    return isSave;
}

function save()
{
   if(ValidateForm()) //it will only execute validation is not fail
   {
    // do your code
   }
}