我有一段javascript,我用它来跟踪表单参与度。我使用$(this)将一个对象传递给我的脚本中的两个函数,但我的下几行代码没有执行,因为Chrome说“无法读取未定义的属性'长度'。为什么我不能使用$(这个)再参考一下?
$('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>
但这不是我的剧本所寻求的吗?如果它没有名称,我希望它继续前进。如何在不收到错误的情况下检查属性?
答案 0 :(得分:2)
正如Vega所见,问题出在attr('name')
值上。
不要检查对象的长度以检查它的定义,因为当没有可以占用长度的对象时,这会引发错误。
只需检查它已定义并使用通常的js模式具有非空值:
if ($(this).attr('name'))
而不是
if ($(this).attr('name').length)
请注意,第一次测试检查也不是""
。因此,绝对没有理由同时检查对象是否已定义且不是""
。
答案 1 :(得分: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
}
});