JQuery PHP / HTML切换onclick

时间:2013-10-29 19:24:12

标签: javascript php jquery html onclick

这段代码在某种程度上不起作用,我不知道为什么,我不擅长php或js只是想尝试制作一些网站。

不工作的部分是这个最喜欢的按钮,它的工作方式就像它必须工作但点击后它不会切换到“不喜欢”,它只有在你刷新浏览器时才有效。

这是由php文件生成的html:

<a class="btn" id="fav28" title="Add to Favorites" href="javascript:;" onclick="AddFav('28','fav','add')">
    <i class="icon-heart"></i>
</a>

这是js函数:

function AddFav(id, dothis, dowhat) {

$.ajax({
    url: ("/process.php?do="+dothis+"&id="+id+"&action="+dowhat)
});
if(dowhat == "add"){
    document.getElementById(dothis+id).className = 'disabled';
    document.getElementById(dothis+id).onclick = another_function
    document.getElementById(dothis+id).title = 'Remove from Favorites';
}else if(dowhat == "remove"){
    document.getElementById(dothis+id).className = 'btn';
    document.getElementById(dothis+id).title = 'Add to Favorites';
}
}

我试过了

  

document.getElementById(dothis + id).onClick =“AddFav(28,id,remove)”;

但这没有任何反应,它根本不会改变onclick

它要做的是从

更改“onclick”事件
  

onclick =“AddFav('28','fav','add')”

  

的onclick = “AddFav('28' , '喜欢的', '删除')”

提前致谢。

4 个答案:

答案 0 :(得分:2)

我可能错了,但我认为你不能用JavaScript覆盖HTML中的“onclick”属性。 “onclick”将始终运行,即使您尝试更改它或在JavaScript中添加另一个单击处理程序。

此问题的最佳解决方案是删除“onclick”属性,然后使用JavaScript设置点击处理程序。

你的PHP应该生成这个:

<a class="btn" id="fav28" title="Add to Favorites" href="javascript:;">
    <i class="icon-heart"></i>
</a>

请注意,“onclick”已被删除。在你的JS中你应该有这样的东西:

var favButton = document.getElementById('fav28');

favButton.addEventListener( 'click', function(){
    // Note: `this` is referring to the button you clicked
    if( this.className === 'disabled' ) {

        // Run AddFav as if you were removing the favourite

        this.className = 'btn';
        this.title = 'Add to Favourites';

    } else {

        // Run AddFav as if you were adding the favourite

        this.className = 'disabled'
        this.title = 'Remove from Favourites';

    }

});

然后你的AddFav方法只需要担心添加或删除收藏夹,在你的情况下看起来它只是一个Ajax调用。您可以从AddFav删除更改按钮的所有逻辑,并将其调用到我已注释掉的位置。

答案 1 :(得分:1)

你说你试过

document.getElementById(dothis+id).onClick = "AddFav(28,id,remove)";

但语法错误,因为您没有idremove(即字符串)的qoutes,如:

AddFav(28,'id','remove')";

我看到你使用jquery ..如果你使用jquery为什么不享受所有功能。你的功能可以变成:

function AddFav(id, dothis, dowhat) {

$.ajax({
    url: ("/process.php?do="+dothis+"&id="+id+"&action="+dowhat)
});
if(dowhat == "add"){

    $('#' + dothis + id).addClass('disabled'); // add class disabled
    $('#' + dothis + id).removeClass('btn'); // remove class btn if exist

    $('#' + dothis  +id).on( "click", function() {
         AddFav(id,'fav','remove'); // attach new function AddFav for click event
    });

    $('#' + dothis  +id).attr('title','Remove from Favorites');

}
else if(dowhat == "remove"){

    $('#' + dothis + id).addClass('btn'); // add class btn
    $('#' + dothis + id).removeClass('disabled'); // remove class btn if exists

    $('#' + dothis  +id).attr('title','Add to Favorites');

}
}

答案 2 :(得分:1)

如果你想在纯javascript中执行它,而不是将onclick属性更改为另一个函数,就像这样:

document.getElementById(dothis+id).onclick = function { AddFav(id,'fav','remove') };

像这样:

http://jsfiddle.net/4ku75/

答案 3 :(得分:1)

可能是范围问题:AddFav函数可能未在全局范围内定义。

尝试替换

function AddFav(id, dothis, dowhat) {

window.AddFav = function(id, dothis, dowhat) {

这样,您的AddFav功能是全局的,您可以使用window.AddFav或仅AddFav

来调用它