为什么$(this).attr不起作用?他们带回'undefined'

时间:2015-05-20 19:15:09

标签: javascript jquery

所以我有几个按钮,因为我不想为每个按钮编写相同的代码我试图创建一个动态事件处理程序,可以管理基于.selected-pack类的所有按钮但所有虽然有一个值,但$(this)属性仍未定义。

这是js:

//Function In Test! 
$('.selected-pack').click(function(event) {

    if($("#mainconsole").val() == "") {
        alert("Select Your Console!")
        return;
    }


    if($("#paymentmethod").val() == "") {
        alert("Select Your Preferred Payment Method!")
        return;
    }

     $("#selectConsolediv").fadeOut("medium", function() {
                    $("#choosePlatformLI").removeClass("active");



        var packipn = $(this).attr('data-ipn');
        var packipnpp = $(this).attr('data-ipnpp');
        var packname = $(this).attr('data-name');
        var packprice = "";

                    console.log(packname);
        if ($("#mainconsole").val() == "PS"){
           packprice = $(this).attr('data-psprice');
        }

        if ($("#mainconsole").val() == "XBOX") {
           packprice = $(this).attr('data-xbprice');
        }


        // Skrill
        $("#mainamount").val(packprice);
        $("#mainipn").val(packipn);
        $("#maindesc").val(packname);
        $("#maindiscount").val($("#discount1").val());

         // PayPal
        $("#mainamountpp").val(packprice);
        $("#mainipnpp").val(packipnpp);
        $("#ppitemname").val(packname);
        $("#maindiscountpp").val($("#discount1").val());


        $("#checkoutPackName").text(packname);
        $("#checkoutCode").text($("#discount1").val());
        $("#checkoutPrice").text("£" + packprice);

                    $("#checkoutdiv").fadeIn("medium", function() {
                        $("#checkoutLI").addClass("active");
                    });
     });

});

你们有没有发现错误?请尽快给我评论,提前谢谢:)

1 个答案:

答案 0 :(得分:2)

这是因为$(this)回调中fadeOut()的范围发生了变化。尝试添加:

var self = $(this);

$('.selected-pack').click(function(event) {之后的顶部,并在整个过程中使用self