You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

动态生成链接点击后仅首个变色问题求助

动态链接点击变色问题解决

问题描述

运行时动态生成一批心形链接,期望点击某个链接时该链接变色,但实际点击任意链接时,只有第一个链接的颜色会改变。

原代码

@foreach (var item in Model)
{
    <div class="contact-save">
        <a href="#" class="phone_number" id="favorite" onclick="Fav(@item.id)" >
            <i class="fas fa-heart"></i>
        </a>
    </div>
}
<script>
    var btnvar = document.getElementById('favorite')
    function Fav(id) {
        var url = '@Url.Action("ajaxRent", "Home")';
        if(btnvar.style.color == "red"){
            btnvar.style.color = "grey"
        }
        else{
            btnvar.style.color = "red"
        }

        $.ajax({
            url: url,
            type: 'POST',
            data: {
                id: id
            },
            success: function (data) {
                if(data.length == 0) // No errors
                    alert("Fave success!");
            },
            error: function (jqXHR) { // Http Status is not 200
            },
            complete: function (jqXHR, status) { // Whether success or error it enters here
            }
        }); 
    };
</script>

问题根源

所有动态生成的链接都用了同一个id="favorite"——HTML规范里id是全局唯一标识,document.getElementById('favorite')只会获取页面中第一个匹配该id的元素,所以不管点击哪个链接,代码始终在修改第一个元素的颜色。

解决方案

1. 修改HTML部分

去掉重复的id,在onclick事件中把当前点击的元素(this)作为参数传给函数:

@foreach (var item in Model)
{
    <div class="contact-save">
        <a href="#" class="phone_number" onclick="Fav(@item.id, this)">
            <i class="fas fa-heart"></i>
        </a>
    </div>
}

2. 修改JS函数

接收传入的当前元素,直接操作该元素的样式(或用类名切换更优雅):

方式一:直接操作行内样式
<script>
function Fav(id, element) {
    var url = '@Url.Action("ajaxRent", "Home")';
    // 直接操作当前点击的元素
    if (element.style.color === "red") {
        element.style.color = "grey";
    } else {
        element.style.color = "red";
    }

    $.ajax({
        url: url,
        type: 'POST',
        data: { id: id },
        success: function (data) {
            if (data.length === 0) alert("Fave success!");
        },
        error: function (jqXHR) {},
        complete: function (jqXHR, status) {}
    }); 
};
</script>
方式二:用类名切换(推荐,样式与逻辑分离)

先添加CSS样式:

.phone_number { color: grey; }
.phone_number.favorited { color: red; }

再修改JS函数:

<script>
function Fav(id, element) {
    var url = '@Url.Action("ajaxRent", "Home")';
    // 切换类名实现颜色变化
    element.classList.toggle("favorited");

    $.ajax({
        url: url,
        type: 'POST',
        data: { id: id },
        success: function (data) {
            if (data.length === 0) alert("Fave success!");
        },
        error: function (jqXHR) {},
        complete: function (jqXHR, status) {}
    }); 
};
</script>

内容的提问来源于stack exchange,提问作者Qasim Asghar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 15:35:26