开发者问题收集

未捕获的类型错误 undefined 不是 .empty() 上的函数

2014-11-03
3217

我在 .empty() 方法中收到未捕获类型错误 undefined is not a function。代码为

title: "Criteria: "+ (criteriaText.empty() ? (criteriaIncludeText.empty()? criteriaExcludeText : criteriaIncludeText) : criteriaText)

在上面的代码中,criteriaText 和criteriaIncludeText 具有值。我可以在我的警报消息中看到这一点。使用的 jQuery 版本是 1.7 。我不太清楚为什么在有正确值的情况下它会给出未捕获类型错误 undefined is not a function。有人可以帮忙吗?

编辑

这些变量通过以下代码获取它们的值。

var criteriaText = jQuery(".categorySelect option[value='"+categoryId+"']").text(); 
var criteriaIncludeText = jQuery(".categorySelectInclude option[value='"+categoryId+"']").text();
var criteriaExcludeText = jQuery(".categorySelectExclude option[value='"+categoryId+"']").text();
2个回答

您正尝试在字符串(而不是 HTML DOM 元素)上使用 jQuery 的 empty 方法

例如:

var criteriaText = jQuery(".categorySelect option[value='"+categoryId+"']").text();

但是,jQuery 没有在字符串上提供该方法,因此您正尝试执行 () 不存在的函数(也就是说,不是由 jQuery 的原型链提供的)。

您似乎只想检查值是否为空(在您的三元语句中):

title: "Criteria: "+ (criteriaText.empty() ? (criteriaIncludeText.empty()? criteriaExcludeText : criteriaIncludeText) : criteriaText)

但是,jQuery 的 empty() 方法“从 DOM 中删除匹配元素集的所有子节点”并返回对象 jQuery (计算结果为 true):

alert($('#elementId').empty()?'yes':'no');  
// object jQuery is an object, object coerces to TRUE

现在,你很幸运,因为空字符串已被强制转换为 false ,所以你可以在三元组中省略 .empty() 部分,完成了!

GitaarLAB
2014-11-03

.empty() 是 jquery 函数,它应用于 jquery 对象以使其为空,如 .html('') 。 您的文本变量不是 jquery 对象,而是简单的字符串,当为空时将返回 false,因此您可以尝试:

title: "Criteria: "+ (criteriaText || criteriaIncludeText || criteriaExcludeText);
Yograj Gupta
2014-11-03