为什么jQuery选择器不返回对象而不是元素?

时间:2013-08-15 16:48:47

标签: jquery select

请帮助我理解为什么以下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]没有方法'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()...'。这有帮助吗?

3 个答案:

答案 0 :(得分: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)打印真实
  2. 您使用的是jQuery 1.7+,因为早期版本不支持 .on

答案 1 :(得分:2)

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

<a href ="#">

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

$('div.partner-tab a')

答案 2 :(得分:0)

我会在这里走出困境并怀疑你可能需要:

$("div.partner-tab").on("click", 'a', {
    "partnerId": pid
}, function (e) {
    return showPartnerSettings(e);
});