Maison > Questions et réponses > le corps du texte
Supposons que je ne sois pas sûr qu'il y ait des authorities
(但如果存在,我希望选择它们)。如果没有选中的authorities
,我希望jQuery选择authorities
sélectionnés, qu'ils soient sélectionnés ou non (en fait, cela signifie récupérer la valeur de l'entrée masquée). Mes réflexions sur l'utilisation du concept "vraie valeur"/"fausse valeur" de JS pour gérer cette situation sont les suivantes :
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()) };
Cependant, cela ne fonctionne pas. Fait intéressant, cela fonctionne dans l'extrait de code ci-dessous. Se pourrait-il que val()
在匹配失败时返回的undefined
不是“假值”吗?想想看!我最好的猜测是,当解析undefined
时,JSON.parse()
génère une erreur au lieu de renvoyer une "fausse valeur" que j'espère. Cette méthode n'accepte pas "param OR param", n'est-ce pas ?
Comment pensez-vous que je devrais fournir une solution de repli pour cette situation (en plus, bien sûr, de vérifier la "fausse valeur" des authorities
sélectionnés individuellement, ce qui est un peu verbeux à mon goût) ?
<头>
<元字符集=“UTF-8”>
<标题>Page de gestion标题>
头>
<正文>
<标题>
Nom
Nom de famille
Département
E-mail
标题>
<正文>
Jean
Département américain de l'énergie
IT
john_d@gmail.com
Jane
Département américain de l'énergie
Ressources humaines
jane_d@gmail.com
表>
Remplissez le formulaire
<表格>
<标签=“名称”>Nom : 标签>
形式>
<脚本>
$(document).ready(function() {
$('form').on('submit', fonction asynchrone (événement) {
event.preventDefault();
$('tbody').append(
`
${$(this).find('[name=name]').val()}
${$(this).find('[name=last-name]').val()}
${$(this).find('[name=department]').val()}
${$(this).find('[name=email]').val() || 'Non applicable'}
`
);
const SubmitButton = $(this).find('[type=submit]');
Forme constante = $(this);
Soumettre le bouton.removeClass('btn-primary')
.addClass('btn-succès')
.attr('value', 'L'utilisateur a été ajouté !')
.attr('type', 'bouton')
.click(() => $('[href="#users-table"]').tab('show'));
setTimeout(fonction(){
commitButton.removeClass('btn-succès')
.addClass('btn-primaire')
.attr('valeur', 'soumettre')
.attr('typerépondre à tous(2)je répondrai
P粉8183062802023-09-11 00:47:41
Le problème est que si le sélecteur ne trouve aucune correspondance, .val()
返回undefined
,而JSON.parse(undefined)
il lève une exception.
Exécutez la solution de secours dans la liste d'arguments de JSON.parse()
afin d'analyser toute valeur obtenue avec succès.
authorities: JSON.parse($(this).find('[name=authorities]:checked').val() ||
$(this).find('[name=authorities]:first').val())
répondre0P粉5613239752023-09-11 00:35:45
En fonction de votre utilisation, vous disposez de plusieurs options :
- Vous pouvez combiner comme ceci
JSON.parse
。这将使它在解析之前回退到其他字符串,因此如果第一个值是undefined
,它不会出错。但是,如果两个值都是undefined
ou l'un d'entre eux est un JSON invalide, ce qui provoquera une erreur.
JSON.parse($(this).find('[name=authorities]:checked').val()) || $(this).find('[name=authorities]').val());
- Si vous savez que les valeurs sont soit un JSON valide, soit
undefined
,您可以回退到null
。 null
une valeur JSON valide, elles peuvent être analysées. Cependant, si l'une des valeurs JSON n'est pas valide, une erreur se produira toujours.
JSON.parse($(this).find('[name=authorities]:checked').val()) || $(this).find('[name=authorities]').val() || null);
- S'il y a une chance que l'une ou l'autre des valeurs soit un JSON invalide, vous pouvez l'entourer d'un bloc try/catch. De cette façon, même s’il n’est pas valide, aucune erreur ne sera générée. C'est l'option la plus sûre et elle ne se trompera jamais.
// 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())
répondre0Annuler