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: オブジェクト [オブジェクト オブジェクト] にメソッド '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を出力するか、trueconsole.log($==jQuery)を出力します
  2. 以前のバージョンではサポートされていないため、jQuery 1.7+ を使用しています。.on
于 2013-08-15T16:53:45.630 に答える
0

私はここで手足を踏み出すつもりであり、あなたが必要とするかもしれないと思う:

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