2010-08-18 4 views
1

Mise à jour ExemplePasser une variable javascript pour Ruby dans une zone de liste déroulante nav

J'utilise une boîte Sélectionnez comme un GPS. Quand je sélectionne un article, je voudrais être redirigé vers cette page.

= select (@organization, "tabs", @organization.tabs.collect { |t| t.title }, {} { :onchange => "escape_javascript(#{ render edit_organization_tab_path(@organization, this.value)})"}) 

Ainsi cet exemple ne fonctionne pas parce que je ne suis pas sûr de savoir comment passer une variable Javascript pour Ruby

Est-il possible de le faire entièrement en Ruby? Ou dois-je utiliser jQuery?

Répondre

1

Si vous utilisez jQuery, vous pouvez le faire avec quelque chose comme ceci:

= select(@organization, "tabs", @organization.tabs.collect { |t| [ t.title, edit_organization_tab_url(t) ] }, { }, :onchange => "window.location.href=$(this).val()") 

La valeur de chaque élément dans la liste de sélection devrait être l'URL que vous souhaitez rediriger la personne.

Je ne suis pas sûr de ce que vous vouliez dire en mettant un appel de rendu Rails dans un bloc JavaScript.

0

Vous n'avez pas besoin de jQuery, mais vous aurez besoin de Javascript. En fin de compte, vous devrez utiliser (et éventuellement créer) un assistant qui créera une boîte de sélection prête pour la navigation (incluant le code Javascript nécessaire) ou ajouter des écouteurs d'événement à votre sélection directement dans votre vue (inline ou dans un script inclus) .

+0

Mise à jour mes idées ci-dessus. Appréciez votre perspicacité. – Trip

1

Avez-vous réfléchi à la manière dont cela pourrait se dégrader si l'utilisateur n'a pas activé JavaScript? Idéalement, les éléments de liens seraient toujours disponibles en tant qu'éléments normaux <a/> afin qu'un utilisateur puisse toujours visiter une page sans JS. D'autant plus que votre boîte de sélection contrôle la navigation du site, je recommanderais une solution de "mise en valeur progressive" et j'écrirais d'abord le balisage sans JS, puis ajouterais le comportement de JS au-dessus. Vous voudrez peut-être des éléments CSS et <div/> qui ressemblent à une boîte de sélection mais ne sont pas littéralement une boîte de sélection, de cette façon vous avez plus de contrôle sur le contenu. Quelques autres choses, comme l'a souligné tadman, rediriger l'utilisateur dans JavaScript se résume à mettre window.location. Si vous utilisez jQuery, vérifiez le change event que vous pouvez attacher aux événements de sélection dans votre liste déroulante et redirigez l'utilisateur si nécessaire. Enfin, en utilisant CSS3 border-radius et d'autres propriétés, vous pouvez créer quelque chose qui ressemble beaucoup à une boîte de sélection, mais qui a beaucoup plus de fonctionnalités. Vous pouvez également trouver un composant comme ceci, googling turned up this example.

Questions connexes