2010-01-20 6 views
0

Salut, c'est mon deuxième article (et la deuxième semaine de programmation, jamais) alors excuses à l'avance.Les cases à cocher refusent manifestement de soumettre des informations sur le clic-HELP

J'ai une liste de cases à cocher qui représentent différents filtres de recherche que je veux passer aux paramètres. Par exemple, s'il s'agissait d'une recherche de restaurant, je voudrais que mes utilisateurs puissent cocher les différents types de cuisine qui les intéressent. Tout comme Yelp.

Tout ce que je veux faire est d'envoyer les nouveaux paramètres chaque fois que quelqu'un clique sur une option. Je ne me soucie pas d'AJAX en ce moment (je franchirai ce pont quand j'y viendrai). Puis-je le faire avec un objet observe_form même si je n'utilise pas AJAX?

Puis-je utiliser javascript? J'ai vu des choses sur les "gestionnaires d'événements" mais je n'ai aucune idée de ce que sont ces derniers. Je déteste abandonner et demander mais je travaille maintenant depuis 19 heures et je ne peux plus gérer. Merci!

CODE: (MISE À JOUR DE TYPO)

 <div id="cuisine_form_div"> 
    <% form_tag(hotels_path, :method => "GET", :id => :cuisine_form) do %> 
    <%= check_box_tag('my_cuisine[]', 'Mexican', :onclick => "document.cuisine_form.submit();") %> 
    <%= label_tag(:my_cuisine, "Mexican", :onclick => "document.cuisine_form.submit();") %> 
    <%= check_box_tag('my_cuisine[]', 'Delis') %> 
    <%= label_tag(:my_cuisine, "Delis") %> 
    <%= submit_tag 'update' %> 
    <% end %> 
    </div><!--end.id="cuisine_form_div"--> 

Notez que chaque fois que j'insère le javascript comme ci-dessus, il précontrôles la case à l'écran, mais ne présente pas d'information à l'URL. Si je clique sur le bouton soumettre, tout fonctionne bien, mais "onclick" je ne peux pas obtenir l'URL pour bouger.

Répondre

0

Je pense que ce que vous voulez faire est à chaque clic que vous aurez besoin de tester l'état «coché» de la case à cocher. À ce stade, vous devrez lire ce qui est vérifié à partir de l'attribut ID ou VALUE. Vous pouvez ensuite alerter() la valeur à déboguer ou utiliser console.log si vous utilisez des outils Firebug ou Developer dans Chrome.

De même, vous voudrez écrire une fonction à mettre dans votre événement onClick au lieu d'essayer d'écrire la logique dans l'événement.

départ par la simple création d'une fonction telle que

function clickCheckbox { 
    /* paste your existing onClick logic */ 
} 

et le modifier à partir de là ...

Si vous avez besoin syntaxe exacte laissez-moi savoir.

Je recommande d'utiliser jQuery. Ajoutez la bibliothèque jQuery à votre balise principale sur toutes vos pages. Cela permet des fonctions plus faciles à utiliser pour AJAX et les choses.

Vous pouvez faire:

$('#CheckboxID').click(function() { 
    if($(this).attr('checked')) { 
     $(this).attr('checked',false); 
    } else { 
     $(this).attr('checked',true); 
    } 
}); 
+0

Merci! Je suis sûr que c'est stupide mais ça me fait mal de m'en sortir? 1) "tester l'état 'coché' de la case à cocher" - comment? Lorsque je regarde la case à cocher dans firebug, le balisage est le même, qu'il soit coché ou non. 2) "lire dans ce qui est vérifié à partir de l'attribut ID ou VALUE" - "lire" en regardant la marque? Est-ce que "id" et "value" sont les mêmes? J'ai pensé "id" = "nom". 3) "alert() la valeur à déboguer" - vous voulez dire changer le JS en: onchange => "alert (this.value);" correct? 4) "écrire une fonction ..." - votre dicton pour écrire une nouvelle fonction qui est déclenchée ... comment? beaucoup à apprendre ... thx – brett1211

+0

Je recommande d'utiliser jQuery, il aide à rendre beaucoup de la syntaxe Javascript plus facile pour les choses AJAX. Ajoutez la bibliothèque jQuery à vos pages. – Joshua

0

Beaucoup d'erreurs, mais maintenant il travaille dans mon application de test!:)

Ces points ont été absents/cassé

  • formulaire doit id afin de le trouver en Javascript
  • check_box_tag a besoin d'un troisième paramètre pour définir l'état sélectionné (et quatrième (votre troisième) est d'ajouter code HTML)
  • Utilisez onchange, donc il n'a pas d'importance si l'utilisateur clique sur la case à cocher ou sur l'étiquette
  • Ajouter id correct case, alors que l'étiquette est attachée à ce
  • étiquette Fix selon les mises à jour/correctifs précédents

La forme résultante devient plus comme ceci:

<% form_tag(cuisine_path, :method => "GET", :id => :cuisine_form, :name => :cuisine_form) do %> 
    <%= check_box_tag('my_cuisine[]', 'Mexican', true, { :id => :cuisine_mexican, :onchange => "document.cuisine_form.submit();" }) %> 
    <%= label_tag(:cuisine_mexican, "Mexican") %> 
    <%= check_box_tag('my_cuisine[]', 'Delis', false, { :id => :cuisine_delis, :onchange => "document.cuisine_form.submit();" }) %> 
    <%= label_tag(:cuisine_delis, "Delis") %> 
    <%= submit_tag 'update' %> 
<% end %> 
+0

Génial, ça a marché! Pouvez-vous juste clarifier quelques choses pour moi afin que je ne fasse pas les mêmes erreurs: 1) "forme besoins id" - vérifier. "nom" ne fonctionne pas. 2) "troisième/quatrième paramètres" Je souhaite que les cases restent cochées après la recharge. J'ai atteint cet objectif en extrayant des paramètres et une logique conditionnelle, mais y a-t-il un moyen plus facile? 3) Je reçois votre convention de nommage, a du sens. mais pourquoi mettez-vous le ": id" et le JS ensemble dans un hachage? Merci beaucoup! Cette chose de la communauté est géniale! – brett1211

+0

Bon à entendre! Pour 2) je pense que votre solution est fondamentalement la seule chose que vous pourriez faire puisqu'il n'y a pas de modèle derrière le formulaire. 3) Si vous regardez la documentation check_tag_box, vous pouvez voir que le dernier paramètre est un hash d'options utilisé pour générer du code HTML supplémentaire. – Veger

+0

Oh btw puisque vous êtes nouveau: pour soutenir cette communauté, vous pouvez voter sur les réponses que vous pensez être utiles (ou qui sont utiles en général). Et pour votre propre question, vous pouvez choisir une réponse qui est la solution à votre problème. De cette façon, les autres visiteurs d'une question voient quelles réponses ils doivent choisir lorsqu'ils sont confrontés au même problème. – Veger

Questions connexes