2010-02-23 4 views
1

Je souhaite ajouter un événement onChange simple à une liste de sélection que j'ai dans Rails. Comment puis-je faire cela?Joindre un événement onChange pour sélectionner une liste dans Rails

Ceci est la sélection du code de la boîte:

= f.select(:question_type_id, QuestionType.all.collect {|qt| [ qt.name, qt.id ]}, { :include_blank => "Please Select a Question Type" }) 

L'événement onChange est censé appeler une fonction, fillAnswerNumber(), qui prend la valeur sélectionnée et ajoute un tas d'options à une autre liste de sélection basée sur le résultat.

edit: je réalisais que je besoin d'un événement onChange fait ...

Répondre

2

Je pense que j'ai tout compris ... grâce à quelques réponses SO et à quelques articles de blog pratiques.

Voici ce que j'ai. Mes sélectionner se présente comme suit:

= f.select(:question_type_id, QuestionType.all.collect {|qt| [ qt.name, qt.id ]}, { :include_blank => "Please Select a Question Type" }, :onchange => "fillAnswerNumber();") 

et mon code JavaScript (JQuery) ressemble à ceci:

:javascript 
    function fillAnswerNumber(){ 
    var question_type_name = $("#question_question_type_id :selected").text() 
    if(question_type_name == "Single Input"){ 
     $("#answer_number") 
     .find('option') 
     .remove() 
     .end() 
     .append($('<option selected="selected"></option>').val("1").html("1")) 
     .append($('<option></option>').val("2").html("2")) 
     .append($('<option></option>').val("3").html("3")) 
     .append($('<option></option>').val("4").html("4")) 
     ; 
    }else if(question_type_name == "Multiple Choice"){ 
     $("#answer_number") 
     .find('option') 
     .remove() 
     .end() 
     .append($('<option></option>').val("3").html("3")) 
     .append($('<option selected="selected"></option>').val("4").html("4")) 
     .append($('<option></option>').val("5").html("5")) 
     .append($('<option></option>').val("6").html("6")) 
     ; 
    } 
    } 
5

En utilisant jquery, je lie l'événement sur le client (la charge du document).

$("#select_id").onclick(function(){}); 

Rien que vous devez faire à l'intérieur Rails pour obtenir ce travail, autre que soit définir explicitement un identifiant (mais Rails fournira un pour vous si vous utilisez les constructeurs de formulaire)

+2

En fait, le déclencheur jQuery vous voulez changer est ... $ ("# select_id") changement (function() {}). – mindtonic

1

Je suppose que vous devez ajouter jQuery en direct pour observer le changement selectbox et envoyer la demande ajax à récupérer le résultat et remplir le résultat dans un autre selectox.

Le pseudo-code pourrait ressembler à ceci

$('#question_type_id').live('change',function(){ 
$.ajax({ 
    url: url_to_fetch_result, 
    success: function(responseData) { 
     populate your next select depending your resposeData here 
    } 
}); 

L'avantage d'utiliser est en direct cet événement de sélection de changement de boîte est tiré, même lorsque vous chargez dynamiquement le $ (« # question_type_id ») boîte selectionner temps.

mai cette aide

Questions connexes