2017-03-14 3 views
0

Dans mon fichier index.html.erb, j'ai un formulaire qui envoie avec succès onChange. Toutefois, cela ne fonctionne que si j'utilise les balises <script> placées après mon formulaire. Pourquoi le même js dans welcome.js ne fonctionne pas? L'index se charge comme un itinéraire /welcome.Rails javascript onchange fonctionne avec <script> mais pas extérieurement

# app/assets/javascripts/application.js 

//= require jquery 
//= require jquery_ujs 
//= require jquery-ace.min 
//= require jquery.sortable 
//= require chartkick 
//= require hammer 
//= require_tree . 

fichier js externes

# app/assets/javascripts/welcome.js 

$('.chart-radio-icon').change(function(){ 
    $('#mega_form').submit(); 
}); 

vue

# views/welcome/index.html.erb 
<%= form_tag mega_chart_path, id: 'mega_form', remote: true do %> 
    <%= radio_button_tag :metric_type, :followers_count, true, :class => 'chart-radio-icon'%> 
    <%= label_tag(:followers, 'Followers', :class => 'chart-label chart-label-social') %> 

Encore une fois, les travaux js lorsqu'ils sont placés dans <script> balises dans la vue, mais pas à l'extérieur.

+0

Le javascript est-il chargé sur la page? Pouvez-vous obtenir un 'console.log ('Hello World');' travailler? –

+0

@JamesMilani si je mets 'console.log ('Hello World');' dans le fichier externe, puis aller inspecter> console sur la page je ne vois rien. – HashRocketSyntax

+0

Avez-vous redémarré votre serveur? Cela pourrait être lié à la façon dont vos actifs sont inclus localement dans votre pipeline. –

Répondre

0

EDIT:

Depuis que nous avons déterminé que vos fichiers d'actifs ne sont pas inclus dans le développement. Pour un contrôle de santé mentale essayer et redémarrez votre serveur:

Rails.application.config.assets.precompile = %w(application.js application.css) 

FIN EDIT

Puisque vous utilisez un require_tree ., et depuis le fichier welcome.js est en app/assets/javascripts, il sera inclus dans toutes les pages ton application. See here. Je pense que le problème est que lors du chargement de la page, l'écouteur d'événement n'est pas affecté à l'élément DOM. Essayez d'envelopper votre code JS dans:

#app/assets/javascripts/welcome.js 

$(document).ready(function(){ 
    .... 
}); 
+0

J'ai essayé d'envelopper la fonction existante, mais cela n'a pas fonctionné – HashRocketSyntax

+0

Pouvez-vous regarder le html de la page et voir si le fichier 'welcome.js' est présent sur la page? Il semble que, pour une raison quelconque, le fichier ne soit pas inclus dans les actifs. Quelle version de Rails utilisez-vous? –

+0

Lors de l'inspection des éléments de la page et de l'affichage de la source de la page, je n'ai trouvé ni 'welcome.js' ni' application.js'. J'ai utilisé ctrl + f et inspecté manuellement le '' en particulier – HashRocketSyntax