0

请帮助我理解为什么以下 jquery select 返回一个元素而不是预期的对象。谢谢。

<div class="partner-tab partner-tab-opaque remove4" id="tab-5"> <a href="#">
    <img class="blink" src="../skin/images/logo_endicia.png">
    </a>
</div>

代码

$("<a href=\"#\" />")
    .on("click", {
    "partnerId": pid
}, function (e) {
    return showPartnerSettings(e);
})
.appendTo("#footer #tab-" + pid);

// $("<a href=\"#\" />")[ < a href = ​"#" > ​ < /a> ]

错误:

未捕获的 TypeError:Object[object Object] 没有“on”方法

这是整个功能:

$(document).ready(function () {

    showPartnerTabs = function (flashUSPS) {
        $.post("<?=$this->baseUrl('partner/ajaxgetactive')?>", {}, function (data) {
            var partner = data.partners;
            //alert((data.partners).length);
            /* $("#footer .partner-tab").remove();*/
            var remove = 1;
            var doc = $(document);


            for (var id in data.partners) {


                if (partner[id].toggle_value == "on") {
                    remove++;
                    logo = partner[id].logo_file;
                    var pid = parseInt(id) + 1;

                    $("<div class=\"partner-tab partner-tab-opaque remove" + remove + "\" id=\"tab-" + pid + "\" />")
                        .appendTo("#footer");

                    $("<a href=\"#\" />")
                        .on("click", {
                            "partnerId": pid
                        }, function (e) {
                            return showPartnerSettings(e);
                        })
                        .appendTo("#footer #tab-" + pid);

                    var logochck = "tab-" + pid;
                    //alert(logochck);
                    if (flashUSPS && logochck == 'tab-5') {

                        $("<img class='blink' src='../skin/images/" + logo + "' />")
                            .appendTo("#footer #tab-" + pid + " a");
                    } else {
                        $("<img src='../skin/images/" + logo + "' />")
                            .appendTo("#footer #tab-" + pid + " a");
                    }

                    //$("</div>").appendTo("#footer");
                }

                /*
            else
            {

                $("<div class=\"partner-tab partner-tab-opaque remove" + remove + "\" id=\"tab-" + pid + "\" />")
               .appendTo("#footer");

                $("<a href=\"#\" />")
                    .on("click", { "partnerId": pid }, function(e){ return showPartnerSettings(e); })
                    .appendTo("#footer #tab-" + pid);       
                $("<img src='../skin/images/" + logo + "' />")
                    .appendTo("#footer #tab-" + pid + " a");
                //$("</div>").appendTo("#footer");  
            } 
            */
            }
            //alert($(".remove2").length);
            if ($(".remove2").length > 1) {
                $($(".remove2")[0]).remove();
                $($(".remove3")[0]).remove();
                $($(".remove4")[0]).remove();
            }
        }, "json");
    }

    $(".Partnerconnection ul li .controls .toggle-switch").on("click", null, function () {
        $(this).showPartnerTabs();
    });

    showPartnerTabs(<?=$flash?>);
});

正如我在评论中提到的,在我将函数声明从“$.fn.showPartnerTabs()...”更改为“showPartnerTabs()...”之前,该函数运行良好。这有帮助吗?

4

3 回答 3

5

因为$("<a href=\"#\" />")不是选择器

您正在创建一个新的锚元素

除此之外,您的代码似乎是正确的。见jsFiddle

更新

不幸的是,我无法重现该错误

Uncaught TypeError: Object[object Object] has no method 'on'

但是,如果您已更改$.fn.showPartnerTabs()showPartnerTabs(),则此行

$(this).showPartnerTabs();

会抛出这个错误

Object [object Object] has no method 'showPartnerTabs'

请确保以下内容属实

  1. $ 实际上是 jQuery 而不是任何其他库,即 console.log($("<a href=\"#\" />") instanceof $)打印 true 或console.log($==jQuery)打印 true
  2. 您使用的是 jQuery 1.7+,因为早期版本不支持.on
于 2013-08-15T16:53:45.630 回答
2

您正在创建一个新元素。如果要选择:

<a href ="#">

在您的情况下使用适当的选择器:

$('div.partner-tab a')
于 2013-08-15T16:54:12.913 回答
0

我将在这里四处走动,怀疑您可能需要:

$("div.partner-tab").on("click", 'a', {
    "partnerId": pid
}, function (e) {
    return showPartnerSettings(e);
});
于 2013-08-15T17:13:39.663 回答