为什么jQuery在ready事件中找不到元素?

时间:2014-02-12 06:29:49

标签: jquery properties ready

我使用属性和方法定义了 CgridAdminView 的对象:

var CgridAdminView = {
    controller_name: 'work',
    div_table_id: 'grid-admin-works',
    tr_add: $('#' + this.div_table_id).find('tr').eq(1),
    disabled: '.td_workGroup',
    list_cols: [
        'index',
        'shortName',
        'fullName',
        'codeName',
        'workGroup_id',
        'period',
        'performers']
};

tr_add 属性不包含 ready 事件处理器中的元素:

$(function(){
    CgridAdminView.tr_add.hide();
});

这是有效的:

$(function(){
     var tr_add = $('#'+CgridAdminView.div_table_id).find('tr').eq(1);
     tr_add.hide();
});

但是 tr_add 属性包含 CgridAdminView 对象方法中的必要元素。

出了什么错误?

1 个答案:

答案 0 :(得分:1)

看起来你没有在dom ready handler

中声明CgridAdminView
$(function () {

    var CgridAdminView = {
        controller_name: 'work',
        div_table_id: 'grid-admin-works',
        tr_add: $('#' + this.div_table_id).find('tr').eq(1),
        disabled: '.td_workGroup',
        list_cols: [
            'index',
            'shortName',
            'fullName',
            'codeName',
            'workGroup_id',
            'period',
            'performers']
    };
    CgridAdminView.tr_add.hide();
})

因为在创建tr_add时分配了CgridAdminView属性值,所以当创建对象时如果未加载目标元素,那么$('#' + this.div_table_id).find('tr').eq(1)的评估将不会返回任何结果

重点是jQuery选择器需要在dom ready

中发生