2017-09-01 2 views
0

recordset Résumé de la situation:un bouton radio en fonction d'une valeur

Il y a une page HTML avec quelques entrées qui sont utilisées pour filtrer recordsets.
La table avec les enregistrements est dessinée par une page asp classique.
Chaque ligne a des valeurs affichées dans des éléments d'entrée modifiables que l'utilisateur peut modifier et soumettre. Certaines de ces valeurs sont toujours 0 ou 1, ce que j'essaye de faire est de rendre la vie de l'utilisateur un peu plus facile en montrant cette valeur en utilisant un bouton radio au lieu d'une zone de texte.

Je voudrais donc le bouton radio

<td> 
    <input type="text" id="hidden_isDeleted" value="<%=rs("isDeleted")%>"> 
    <input type="radio" class="form" name="isDeleted" id="isDeletedNo" value="0"> 
    <input type="radio" class="form" name="isDeleted" id="isDeletedYes" value="1"> 
</td>  

à vérifier selon la valeur recordset suivante

<%= rs("isDeleted") %> 

Ce que j'ai essayé jusqu'à présent:
Ma première tentative était de écrire un script jQuery pour faire ce travail:

$(document).ready(function(){ 
    if ($(#hidden_isDeleted).val() == 0) { 
    $("#isDeletedNo").prop("checked", true) 
    } 
    else { 
    $("#isDeletedYes").prop("checked", true) 
    }  
}); 

Ma deuxième pensée a été de quitter jQuery car je suis encore jeune et j'utilise une simple fonction javascript qui serait appelée par un événement <body onload="checkIfDeleted()"> depuis la radio elle-même.

function checkIfDeleted() { 
    if ($(#hidden_isDeleted).val() == 0) { 
    document.getElementById("isDeletedNo").checked = true; 
    } 
    else { 
    document.getElementById("isDeletedYes").checked = true; 
    } 
} 

Est-ce que le <body onLoad="checkIfDeleted()"> s'exécute trop tôt? Ou au moins avant que le jeu d'enregistrements soit récupéré?

La raison pour laquelle j'ai utilisé le champ caché était d'extraire d'abord la valeur, puis de donner la possibilité à l'utilisateur de choisir l'autre radio et donc de changer la valeur lors de l'envoi. Je sais qu'il y a probablement une meilleure façon de faire cela, mais c'est ce que j'ai trouvé en premier lieu.

Ce que je fini par faire:

<td> 
     <input type="radio" class="form" name="isDeletedRadio" id="in_isDeleted" value="0" <% If rs("isDeleted") = CLng(0) Then response.write("checked") End If%> >Έγκυρη 
     <input type="radio" class="form" name="isDeletedRadio" id="in_isDeleted" value="1" <% If rs("isDeleted") = CLng(1) Then response.write("checked") End If%> >Άκυρη 
    </td> 

Et quand il vient le temps de rédiger les modifications dans la base de données, je récupère la valeur de la radio sélectionnée en utilisant le nom de la radio, tout comme que: $('input[name="isDeletedRadio"]:checked').val();

C'est une approche simple et agréable, même si je ne l'aime pas beaucoup le talon VBscript dans les boutons radio, donc si quelqu'un a une meilleure idée que je vais garder un oeil sur cette question.

+0

Pour quoi avez-vous besoin du champ caché? Pourquoi ne publiez-vous pas l'attribut 'checked' dynamiquement sur le bouton radio droit en utilisant votre code côté serveur? – CBroe

+0

J'ai édité ma question, j'espère qu'elle répond à la vôtre. – Karapapas

+1

_ "puis donner la possibilité à l'utilisateur de choisir l'autre radio et donc changer la valeur sur soumettre" _ - et pourquoi cela aurait-il besoin d'un champ caché? Vos boutons radio enverront 0 ou 1, selon ce que l'utilisateur choisit (ou votre présélection), qui n'a pas besoin d'un champ caché. – CBroe

Répondre

2

L'exécution est-elle trop rapide? Ou au moins avant que le jeu d'enregistrements soit récupéré? Non, la fonction se déclenchera une fois le chargement de la page terminé.

Le jeu d'enregistrements lui-même est rempli AVANT que la page commence même à rendre. Rappelez-vous, le code côté serveur ALWAYS s'exécute avant le chargement et le rendu de la page.Comme pour répondre à votre question, et comme d'autres l'ont souligné, il n'est pas nécessaire d'inclure une variable cachée ou un type de javascript pour exécuter le chargement de la page, vous pouvez simplement intégrer la logique directement dans l'élément html , comme ceci:

<td> 
    <input type="radio" class="form" name="isDeleted" id="isDeletedNo" value="0" <% if rs("isDeleted") = false then %> checked="checked" %> > 
    <input type="radio" class="form" name="isDeleted" id="isDeletedYes" value="1" <% if rs("isDeleted") = true then %> checked="checked" %>> 
</td> 

Ceci suppose que votre champ isDeleted dans votre base de données est de type booléen ou binaire. Si c'est un nombre ou une chaîne, vous feriez quelque chose comme:

<td> 
    <input type="radio" class="form" name="isDeleted" id="isDeletedNo" value="0" <% if CStr("" & rs("isDeleted")) = "0" then %> checked="checked" %> > 
    <input type="radio" class="form" name="isDeleted" id="isDeletedYes" value="1" <% if CStr("" & rs("isDeleted")) = "1" then %> checked="checked" %>> 
</td> 

je convertir en une chaîne ici au cas où le champ ne contient aucune donnée, de cette façon vous n'obtiendrez une erreur en essayant de comparer une valeur à une erreur nulle ou vide.

maintenant, lorsque vous publiez, vous enverrez sur la valeur du bouton radio comme vous le feriez pour tout autre élément de forme:

dim isDeleted : isDeleted = Request.Form("isDeleted") 

la valeur doit retourner un 1 ou zéro, selon ce qui était choisi.

+0

C'est exactement ce que je viens de faire. Vérifiez le dernier des commentaires à ma question. L'approche est très similaire, donc je suppose que je dois accepter votre réponse! – Karapapas