2016-09-06 4 views
2

webpackとfirebaseを使用しています。外部JSファイルの関数が呼び出されていない

私は<input type="submit" onclick=logUserIn() value="Log in">

>私はこのラインを持って、私は機能私のindex.htmlファイルで

logUserIn(){ 
    //does stuff 
}; 

を持っている私のindex.jsファイルでは>"start": "webpack-dev-server ./index.js",

私のpackage.jsonにこのラインを持っています

このボタンをクリックすると、このエラーが表示されます>Uncaught ReferenceError: logUserIn is not defined

私のindex.htmlファイル> 012にもこの行がありますindex.jsを含むバンドルファイルにリンクする必要がありますか?

最後に、私はconsole.log('hello')というindex.jsにconsole.logを実行しました。このページを更新すると、helloは、index.htmlがbundle.jsを通じてindex.jsを呼び出していることを意味します。私のメソッド名を認識できませんか?

私はコピーして

+0

'window.logUserIn = logUserIn;' –

+1

関数がグローバルスコープ内にないか、関数が定義されていないか、何かスペルが間違っています。うまくいけば、 'logUserIn'の前に' function'を見逃してしまっただけです。 – epascarello

答えて

1

Webpackを使用すると、modulesが使用されていると見なされます。この方法でコードを整理しないと、いくつかの問題が生じる可能性があります。

あなたの問題に特に関しては、あなたの関数logUserIn()はありますが、それはモジュールの中にあり、それは私的な関数であることを意味します。これはグローバルスコープには見当たらないので、index.htmlはそれを呼び出す関数を「見る」ことができません。

グローバルに利用できるようにするには、関数をエクスポートする必要があります。

ただし、HTMLにlogUserIn()がある特別な理由がない限り、コードを切り替えることをおすすめします。また

Javascriptを

document.getElementById('loginButton').onclick = logUserIn 

HTML

<input type="submit" id="loginButton" value="Log in"> 

場合、:通常は、このケースでは、あなたのコードはより多くのようになりますので、個別のマークアップとあなたのロジックを維持したいです問題のボタンはフォームであるため、フォームのデフォルト機能をe.preventDefault()で上書きする必要があります。

+0

あなたのonclickの例が間違っています – epascarello

+0

@epascarello問題が何かを詳しく教えてください。私は問題をより良く解決するために私の答えを整理したいと思っています。 –

+0

この機能を実行しています。 – epascarello

0

を貼り付けているように、それは私が、問題が解決されるかどうかを確認、その後、あなたのHTMLページに直接あなたのJSファイルをインポートすることをお勧めのいずれか間違いタイプミスではありません。そうでない場合は、ソースの下のコンソールをチェックして、ファイルが正しくロードされているかどうかを確認します。
ファイルがロードされてもまだ動作しない場合は、JSファイルを配置した順番を確認してください。おそらく上に移動してください。
助けてくれることを願っています!

- Nic

関連する問題