-1

我从某人那里得到了这段代码,它应该可以工作,但是它出现了 undefined for 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 回答