0

我有一段 javascript 用于跟踪表单参与度。我使用 $(this) 将对象传递给脚本中的两个函数,但我接下来的几行代码没有执行,因为 Chrome 说“无法读取未定义的属性‘长度’。为什么我不能使用 $(this ) 参考了?

$('select').blur(function () {

                var input_category = get_input_category($(this));

                var form_identifier = get_form_identifier($(this));

                if($(this).attr('name').length) {
// This is where I get the error ^^
                    var object_identifier = $(this).attr('name');
                }
                else if($(this).attr('id').length) {
                    var object_identifier = $(this).attr('id');
                }
                else if($(this).attr('class').length) {
                    var object_identifier = $(this).attr('class');
                }
                else {
                    var object_identifier = null;
                }
});

编辑:选择框没有附加名称值。

                        <select type="select">
                          <option value="volvo">Volvo</option>
                          <option value="saab">Saab</option>
                          <option value="mercedes">Mercedes</option>
                          <option value="audi">Audi</option>
                        </select>

但这不是我的脚本要寻找的吗?如果它没有名字,我希望它继续前进。如何在不出错的情况下检查属性?

4

2 回答 2

2

正如 Vega 所看到的,问题在于attr('name')价值。

不要检查对象的长度来检查它是否已定义,因为当没有可以获取长度的对象时,这会引发错误。

只需使用通常的 js 模式检查它是否已定义并具有非空值:

if ($(this).attr('name'))

代替

if ($(this).attr('name').length)

请注意,第一个测试也检查 this is not ""。因此,绝对没有理由同时检查对象是否已定义""

于 2012-08-29T16:27:33.900 回答
1

从你所说的来看,在我看来你需要添加一些条件检查..试试下面,

$('select').blur(function () {

    var $this = $(this);
    var input_category = get_input_category($this);
    var form_identifier = get_form_identifier($this);

    var object_identifier = null;
    if(this.name) {
        object_identifier = this.name
    } else if(this.id) {
        object_identifier = this.id
    } else if(this.className) {
        object_identifier = this.className
    } 
});
于 2012-08-29T16:29:48.600 回答