-1

私は誰かからこのコードを入手しました。動作するはずですが、未定義になりsource.attr('id')、その理由がわかりません。

var vendorTypeSelect = $("#select-vendor-type");
var vendorLocationSelect = $("#select-vendor-location");
createDropDown(vendorTypeSelect);
createDropDown(vendorLocationSelect);

function createDropDown(source){
    console.log(source);
    var customClass = source.attr('id');  <--- undefined????
    console.log(customClass);

    customClass = customClass.substr(customClass.indexOf("#") + 1)

ソースのコンソール ログは、ID を含むオブジェクトを取得しますが、customClass のコンソール ログには「未定義」と表示されます。また、置くと未定義と表示されます$("#select-vendor-location").attr('id');

ここにページをアップロードしました: http://pixeldesigns.ca/files/blush/

4

1 に答える 1

1

問題は、いつ

$(".dropdown dd ul li a").click(function() {

これらの要素はまだ存在しません。( createDropDown 関数でビルドするまで存在しません。) スクリプト全体を次のようにラップする必要があります。

jQuery(document).ready(function ($) {  // or $(function () {
    var vendorTypeSelect = $("#select-vendor-type");
    var vendorLocationSelect = $("#select-vendor-location");
    createDropDown(vendorTypeSelect);
    createDropDown(vendorLocationSelect);

    //...
});

すべての HTML が解析された後に発生する ready イベントの内部に、これらの要素が存在するためです。createDropDown関数を外部で (できれば前に)定義することもできます$(document).readyが、要素が既に存在するという前提で機能するため、内部で呼び出す必要があります。

于 2013-09-03T17:26:37.947 に答える