2

我不确定自己做错了什么,但在过去的 2 个小时里,我一直在尝试使用 prop 来更改按钮中两个项目的值。它适用于一个,但不适用于另一个,我不知道为什么。

html:

<input type='button' value='Following' id='btnFollow' dataaction="UnFollow" datatype='topic'>

jQuery:

    $("#btnFollow").prop("value", "Follow");
    $("#btnFollow").prop("dataaction", "Follow");

第一项更改(value),但第二项更改( dataaction)。我不知道为什么(否则可能为时已晚,我的大脑正在反抗)。根据文档,我做对了。我在每个命令之间添加了警报,以防一个命令失败,但是两个警报都消失了,这意味着 jquery 在尝试更改第二项时没有崩溃或发生任何事情。我没有看到任何拼写错误,我尝试以菊花链方式连接命令,但仍然没有运气。

有什么建议么?

整个代码:

$(document).ready(function () {
    $('#btnFollow').click(function() {
        var topic_id = $(this).attr('datatopic');
        var action_type = $(this).attr('datatype');
        var action_type_action = $(this).attr('dataaction');
        alert(action_type_action);
        //$("#btnFollow").prop('value', 'Following');
        if (action_type_action == 'Follow') {
            $("#btnFollow").prop({'value': 'Following', 'dataaction': 'UnFollow'});
            //$("#btnFollow").prop("value", "Following");
            //$("#btnFollow").prop("dataaction", "UnFollow");
                 $.ajax({
                type: 'POST',
                url: '/follow_modification',
                async: false,
                data: {
                    topic: topic_id,
                    action: action_type_action,
                    follow_type: action_type
                }
                //complete: function(xmlRequestObject, successString){
                //    ymmReceiveAjaxResponse(xmlRequestObject, successString);
                //}
            });

        } else if (action_type_action == 'UnFollow') {
            $("#btnFollow").prop({'value': 'Follow', 'dataaction': 'Follow'});
            //$("#btnFollow").prop("value", "Follow");
            //$("#btnFollow").prop("dataaction", "Follow");
            $.ajax({
                type: 'POST',
                url: '/follow_modification',
                async: false,
                data: {
                    topic: topic_id,
                    action: action_type_action,
                    follow_type: action_type
                }
                //complete: function(xmlRequestObject, successString){
                //    ymmReceiveAjaxResponse(xmlRequestObject, successString);
                //}
            });
        }
    })

});
4

3 回答 3

8

你的代码工作得很好:http: //jsfiddle.net/zerkms/Capvk/

属性通常会影响 DOM 元素的动态状态,而不会更改序列化的 HTML 属性

http://api.jquery.com/prop/

所以这就是为什么你没有看到它在 html 中发生了变化,而是在 DOM 中发生了变化。如果您也希望在 HTML 中更改它 - 使用.attr()

.data()PS:正如评论中提到的@ahren - 使用和data-xxx属性可能是有意义的

PPS:如果您使用.prop()- 设置值,则需要.prop()分别获取它

于 2012-07-24T04:46:54.107 回答
1

如果需要使用单个 jQuery.prop方法设置多个属性,请尝试以下操作:

反而

$("#btnFollow").prop("value", "Follow");
$("#btnFollow").prop("dataaction", "Follow");

采用

$("#btnFollow").prop({"value": "Follow", "dataaction": "Follow"});
于 2020-09-16T12:43:22.183 回答
-1

请使用.attrjQuery 方法。

请正确使用 html5 数据属性作为enter code here数据操作,您有新的 jQuery 方法来访问此数据属性,$('#btnFollow').data('action')更多详细信息请访问

于 2012-07-24T04:50:10.627 回答