jQuery:$(this).data()为null

时间:2011-04-08 16:16:24

标签: jquery

我不知道为什么$(this).data()在按钮点击事件处理程序中返回null,但是当在firebug中调试时,$("#" + $(this).attr("id")).data()会返回我期望的数据。

for (var i = 0; i < options.AvailableOperations.length; i++) {
        var operation = options.AvailableOperations[i];
        var button = $(this).find("#btn" + operation);
        button.data("operation", operation);
        button.data("entityId", options.entityId);
        button.parent().removeClass('disabledRevButton');

        var data = { operation: operation, entityId: options.entityId };
        button.click(function () {

            $.postJson({
                url: GlobalVars.perfomDFOperation,
                data: $(this).data(),
                success: function (data) {
                    if (data != null) {
                        if (data.IsSuccess && data.RefreshPage) {
                            location.reload(true);
                        }
                        else if (!data.isSuccess) {
                            alert("error: " + data.Message)
                        }
                    }
                }
            });
        });
    }

2 个答案:

答案 0 :(得分:1)

this可能不再引用按钮本身,因为它已经在$.postJson()范围内。

您可能想尝试使用闭包。

button.click(function(){

    var myBtn = $(this);
    $.postJson({
        data: myBtn.data(),
        // blah
    });

});

我不确定,但值得一试。

答案 1 :(得分:0)

变量'button'不是你想要从中获取data()的选项吗?使用buton.data()因为$(this)可以很容易地引用流程中的其他内容。

我建议您使用console.log()进行调试,例如,在尝试发布JSON之前,执行console.log($(this))并查看它引用的内容。