2017-10-09 5 views
0

Supposons, j'ai deux questions quiz.Chaque question ont des boutons radio pour sélectionner la réponse et un bouton de réponse claire pour effacer la réponse. Le bouton d'effacement cache/affiche uniquement lorsque la réponse est sélectionnée/désélectionnée dans son bloc de questions respectif.Comment afficher - cacher le bouton basé sur si le bouton radio le plus proche est sélectionné?

Comment trouver si le bouton radio sélectionné/désélectionné est du bloc de questions le plus proche et afficher/masquer le bouton d'effacement en conséquence?

Here,is the screenshot of the scenario I am talking about.

Et, voici le code JS J'utilise actuellement

jQuery(function($) { 

if ($("input[type]").is(":radio")) { 
    $(".answer").append("<button type='button' name='clear' >Clear</button>"); 
} 

if ($("input[type=radio]:checked").length > 0) { 
    $('button[name=clear]').show(); 
} 
else{ 
    $('button[name=clear]').hide(); 
    } 


$("input[type=radio]").on('click', function() { 
    $nearest= $(this).closest('.answer').find('button[name=clear]'); 
    $nearest.show(); 
}); 

$('button[name=clear]').on('click', function() { 
    $(this).closest('.answer').find(':radio').prop('checked', false); 
    $(this).hide(); 
}); 

if ($('.content').parent().hasClass("deferredfeedback")) { 
    if ($('.answer .r0 input').prop('disabled')) { 
     $("button[name=clear]").remove(); 
    } 
} else { 
    if (!($('div.im-controls').length)) { 
     $("button[name=clear]").remove(); 
    } 
} 

}); 

quelque part que je suis absent quelque chose que je ne suis pas en mesure de savoir, quelqu'un peut-il me guider à ce sujet?

+1

Pouvez-vous partager votre code html? Peut-être que vous pouvez le faire en utilisant CSS seulement. – Walk

+0

vous pouvez le faire en utilisant différentes idées, 1) Vous pouvez avoir chaque question + bouton dans un div. Donc, en cliquant sur le bouton, vous pouvez obtenir le div parent et désélectionner tous les boutons radio à l'intérieur de ce 2) Donnez un nom d'identification difficile aux boutons radio et effacer le bouton, donc tout en obtenant le bouton d'effacement, vous pouvez trouver le bouton radio associé. –

Répondre

0

Pourquoi ne pas avoir le bouton clair là-bas et le cacher

CSS

.clearButton { display:none} 

jQuery - contenant en supposant par réponse a la classe "réponse" et
bouton clair a la classe "clearButton":

$(function() { 
    $(".answer").on("click","input[type=radio]",function() { 
    $(this).closest(".answer").find(".clearButton").show(); 
    }); 
}); 

ou si les frères et sœurs:

$(function() { 
    $(".answer").on("click","input[type=radio]",function() { 
    $(this).siblings(".clearButton").show(); 
    }); 
}); 

Pour le clair, vous pouvez utiliser

$(".answer").on("click",".clearButton",function() { 
    $(this).siblings("input[type=radio]").prop("checked",false); 
    $(this).hide(); 
    }); 

Pour afficher le bouton clair onload si certaines radios sont déjà vérifiés:

$("[type=radio]:checked").trigger("click") 

$(function() { 
 
    $(".answer").on("click", "input[type=radio]", function() { 
 
    $(this).closest(".answer").find(".clearButton").show(); 
 
    }); 
 

 

 
    $(".answer").on("click", ".clearButton", function() { 
 
    $(this).siblings("input[type=radio]").prop("checked", false); 
 
    $(this).hide(); 
 
    }); 
 

 

 
    $("[type=radio]:checked").trigger("click") 
 

 
});
.clearButton { 
 
    display: none 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="answer"> 
 
    <label><input type="radio" name="answer1" value="1">Answer 1</label> 
 
    <label><input type="radio" name="answer1" value="2">Answer 2</label> 
 
    <label><input type="radio" name="answer1" value="3">Answer 3</label> 
 
    <button type="button" class="clearButton">Clear</button> 
 
</div> 
 
<hr/> 
 
<div class="answer"> 
 
    <label><input type="radio" name="answer2" value="1">Answer 1</label> 
 
    <label><input type="radio" name="answer2" value="2" checked>Answer 2</label> 
 
    <label><input type="radio" name="answer2" value="3">Answer 3</label> 
 
    <button type="button" class="clearButton">Clear</button> 
 
</div>

+0

Salut, Merci pour vos suggestions, mais je veux est de conserver le bouton effacer jusqu'à ce qu'il est pressé, supposons, j'ai plusieurs pages avec chacun ayant 2 questions à ce sujet.Dans le cas actuel, si je passe à la deuxième page, le clair Le bouton n'est plus visible lorsque je reviens sur la première page. –

+0

S'il vous plaît voir la mise à jour. Dernière déclaration va dans la fonction $ après les gestionnaires d'événements – mplungjan

+0

Désolé, mais il ne déclenche pas le clic –

0

Essayez ci-dessous le code

code Js ici

jQuery(function($) { 
    $("button").hide(); 
    $("input[type='radio']:checked").each(function(e){ 
     $(this).closest('.answers').find("button").show(); 
    }); 
    $("body").on("change","input[type='radio']" ,function(){ 
    $(this).closest('.answers').find("button").show(); 
    }); 

    $("body").on("click","button" ,function(){ 
    $(this).closest('.answers').find("input[type='radio']:checked").prop("checked",false); 
    $(this).hide(); 
    }); 
}) 

click here to show jsFiddle demo

+0

Pas recommandé d'enlever et ajouter des éléments DOM quand ils peuvent être cachés et affichés – mplungjan

+0

vérifier mise à jour code –

+0

Maintenant, il ressemble à la mienne – mplungjan