假設,我不確定是否存在已選取的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取消