假设,我不确定是否存在已选中的authorities
(但如果存在,我希望选择它们)。如果没有选中的authorities
,我希望jQuery选择authorities
,无论它们是否被选中(实际上,这意味着检索隐藏输入的值)。我对使用JS的“真值”/“假值”概念来处理这种情况的想法是:
let user = { id: $(this).find('[name=id]').val(), username: $(this).find('[name=username]').val(), password: $(this).find('[name=password]').val(), name: $(this).find('[name=name]').val(), lastName: $(this).find('[name=lastName]').val(), department: $(this).find('[name=department]').val(), salary: $(this).find('[name=salary]').val(), age: $(this).find('[name=age]').val(), email: $(this).find('[name=email]').val(), enabledByte: $(this).find('[name=enabledByte]').val(), authorities: JSON.parse($(this).find('[name=authorities]:checked').val()) || JSON.parse($(this).find('[name=authorities]').val()) };
然而,它不起作用。有趣的是,它在下面的代码片段中确实起作用。难道val()
在匹配失败时返回的undefined
不是“假值”吗?想想看!我最好的猜测是,当解析undefined
时,JSON.parse()
会抛出错误,而不是返回一些我希望的“假值”。这个方法不接受“param OR param”,对吗?
你认为我应该如何提供这种情况的回退(除了当然,单独检查选中的authorities
的“假值”,这对我来说有点冗长)?
<头>
<元字符集=“UTF-8”>
<标题>管理页面标题>
头>
<正文>
<标题>
名称
姓氏
部门
电子邮件
标题>
<正文>
约翰
美国能源部
IT
john_d@gmail.com
简
美国能源部
人力资源
jane_d@gmail.com
表>
填写表格
<表格>
<标签=“名称”>名称:标签>
形式>
<脚本>
$(文档).ready(函数() {
$('form').on('提交', 异步函数(事件) {
event.preventDefault();
$('tbody').append(
`
${$(this).find('[name=name]').val()}
${$(this).find('[name=last-name]').val()}
${$(this).find('[name=部门]').val()}
${$(this).find('[name=email]').val() || '不适用'}
`
);
const SubmitButton = $(this).find('[type=submit]');
常量形式 = $(this);
提交按钮.removeClass('btn-primary')
.addClass('btn-成功')
.attr('value', '用户已添加!')
.attr('类型', '按钮')
.click(() => $('[href="#users-table"]').tab('show'));
设置超时(函数(){
commitButton.removeClass('btn-成功')
.addClass('btn-primary')
.attr('值', '提交')
.attr('类型全部回复(2)我来回复
P粉8183062802023-09-11 00:47:41
问题在于如果选择器找不到任何匹配项,.val()
返回undefined
,而JSON.parse(undefined)
会引发异常。
在JSON.parse()
的参数列表中执行备用方案,这样您将解析成功获取的任何值。
authorities: JSON.parse($(this).find('[name=authorities]:checked').val() ||
$(this).find('[name=authorities]:first').val())
回复0P粉5613239752023-09-11 00:35:45
根据您的使用情况,您有几个选项:
- 您可以像这样组合
JSON.parse
。这将使它在解析之前回退到其他字符串,因此如果第一个值是undefined
,它不会出错。但是,如果两个值都是undefined
或其中一个是无效的JSON,这将导致错误。
JSON.parse($(this).find('[name=authorities]:checked').val()) || $(this).find('[name=authorities]').val());
- 如果您知道这些值要么是有效的JSON,要么是
undefined
,您可以回退到null
。 null
是一个有效的JSON值,可以解析。但是,如果任何一个值是无效的JSON,仍然会出错。
JSON.parse($(this).find('[name=authorities]:checked').val()) || $(this).find('[name=authorities]').val() || null);
- 如果有可能任何一个值都是无效的JSON,您可以将其包围在try/catch块中。这样,即使它是无效的,也不会抛出错误。这是最安全的选项,永远不会出错。
// Helper to make it easier to do this inline
function safeJsonParse(string) {
try {
return JSON.parse(string);
} catch {
// JSON is invalid. Will implicitly return undefined.
}
}
safeJsonParse($(this).find('[name=authorities]:checked').val()) || safeJsonParse($(this).find('[name=authorities]').val())
回复0取消