Jquery中出现“Uncaught TypeError: Cannot read property 'trim' of undefined”错误

14

在JQuery中,将空格字符替换为'%20'。但仅适用于其他表单而不适用于单个表单。其中包含标题为

In jQuery,将空格字符替换为'%20',但只适用于其他表单而不适用于单个表单。其中包含标题。
<header>
    <script src="http://code.jquery.com/jquery-1.9.1.js"></script>
    <script src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"></script>
    <link rel="stylesheet" href="http://code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css" />
</header>

在其他形式中使用的代码正常运行。

var vname = $("#EarningsTypes").val();
vname = vname.trim().replace(/ /g, '%20');
jQuery.noConflict();

1
vname未定义...它里面什么也没有。 - Akki619
问题中是否可以包含 #EarningTypes 元素的 html - guest271314
2个回答

28

你遇到了错误

Jquery中出现了“Uncaught TypeError: Cannot read property 'trim' of undefined”错误

这意味着变量vnameundefined。为了避免出现此错误,您可以使用三元运算符将字符串的默认值设置为空字符串,当它是undefined时。

var vname = $("#EarningsTypes").val() == undefined ? '' : $("#EarningsTypes").val().trim();
vname = vname.replace(/ /g, '%20');

你也可以使用||来设置默认值

var vname = $("#EarningsTypes").val() || '';
如果您使用的是不支持 trim 的旧浏览器,您可以使用来自MDN的polyfill
if (!String.prototype.trim) {
  String.prototype.trim = function() {
    return this.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '');
  };
}

8
可以使用以下代码:var vname = $("#EarningsTypes").val() || "" - Jai

0

这意味着变量vname未定义。为了防止出现此错误,您可以使用可选链操作符(?.)

可选链操作符(?.)使您能够读取连接对象链中深处的属性值,而无需检查链中的每个引用是否有效。

?.操作符类似于.连接操作符,但如果引用是nullishnullundefined),则不会导致错误,而是短路并返回undefined。当与函数调用一起使用时,如果给定的函数不存在,则返回undefined

当访问链接属性时存在丢失引用的可能性时,这将导致更短和更简单的表达式。在探索对象内容时,如果没有已知保证需要哪些属性,则也可能很有帮助。

vname = vname?.trim()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接