Heim > Fragen und Antworten > Hauptteil
Angenommen, ich bin mir nicht sicher, ob es authorities
(但如果存在,我希望选择它们)。如果没有选中的authorities
,我希望jQuery选择authorities
s gibt, die überprüft werden, unabhängig davon, ob sie ausgewählt sind (eigentlich bedeutet dies, den Wert der versteckten Eingabe abzurufen). Meine Gedanken zur Verwendung des „wahren Werts“/„falschen Werts“-Konzepts von JS zur Bewältigung dieser Situation sind:
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()) };
Es funktioniert jedoch nicht. Interessanterweise funktioniert es im folgenden Codeausschnitt. Könnte es sein, dass val()
在匹配失败时返回的undefined
不是“假值”吗?想想看!我最好的猜测是,当解析undefined
时,JSON.parse()
einen Fehler auslöst, anstatt einen „falschen Wert“ zurückzugeben, was ich hoffe. Diese Methode akzeptiert kein „param OR param“, oder?
Wie sollte ich Ihrer Meinung nach einen Fallback für diese Situation bereitstellen (außer natürlich, den „falschen Wert“ der ausgewählten authorities
einzeln zu überprüfen, was für meinen Geschmack etwas ausführlich ist)?
<头>
<元字符集=“UTF-8”>
<标题>Verwaltungsseite标题>
头>
<正文>
<标题>
Name
Nachname
Abteilung
E-Mail
标题>
<正文>
John
US-Energieministerium
ES
john_d@gmail.com
Jane
US-Energieministerium
Personalwesen
jane_d@gmail.com
表>
Füllen Sie das Formular aus
<表格>
<标签=“名称”>Name: 标签>
形式>
<脚本>
$(document).ready(function() {
$('form').on('submit', asynchrone Funktion (Ereignis) {
event.preventDefault();
$('tbody').append(
`
${$(this).find('[name=name]').val()}
${$(this).find('[name=last-name]').val()}
${$(this).find('[name=Abteilung]').val()}
${$(this).find('[name=email]').val() || 'Nicht zutreffend'}
`
);
const SubmitButton = $(this).find('[type=submit]');
Konstante Form = $(this);
Senden button.removeClass('btn-primary')
.addClass('btn-success')
.attr('value', 'Benutzer wurde hinzugefügt!')
.attr('type', 'button')
.click(() => $('[href="#users-table"]').tab('show'));
setTimeout(function(){
commitButton.removeClass('btn-success')
.addClass('btn-primary')
.attr('value', 'submit')
.attr('TypAntworte allen(2)Ich werde antworten
![P粉818306280](https://www.php.cn/static/images/user_avatar.jpg)
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())
Antwort0![P粉561323975](https://www.php.cn/static/images/user_avatar.jpg)
P粉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())
Antwort0Stornieren