source.attr('id')未定义?

时间:2013-09-03 17:11:27

标签: javascript jquery

我从某人那里获得了这个代码,它应该正常工作,但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/

1 个答案:

答案 0 :(得分: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);

    //...
});

因为在ready事件内部,在解析了所有HTML之后触发,所以这些元素现在确实存在。你甚至可以在createDropDown之外(最好在$(document).ready之外)定义你的{{1}}函数,但你必须在里面调用它,因为它假设元素已经存在。