私が持っている内外のJSファイル
$(document).ready(function() {
var example = function(){ alert("hello") }
});
HTMLからその関数を呼び出したいのですが、どうすればいいですか?
<img src="..." ondblclick="example()" />
nb jquery dblclick()は知っていますが、上記を正しく行う方法に興味があります。
私が持っている内外のJSファイル
$(document).ready(function() {
var example = function(){ alert("hello") }
});
HTMLからその関数を呼び出したいのですが、どうすればいいですか?
<img src="..." ondblclick="example()" />
nb jquery dblclick()は知っていますが、上記を正しく行う方法に興味があります。
$(document).ready(function() {
window.example = function() {
alert("hello")
}
});
または、可能であれば外部で定義してください。ドキュメント内で定義する必要があるようには見えません。
ここでの他の解決策は機能しますが、プロジェクトの構造上、HTML からイベント処理コードを削除し、javascript を介してイベントを完全にフックする (HTML/JS を分離する) のが最善の解決策です。プロジェクトにはすでに jQuery があるため、これは非常に簡単です。そのために必要なことは、画像にある種の ID を付けることだけです。
<img id="example" src="..." />
次に、次のように ready() 関数でイベントコードをフックするだけです
$(document).ready(function() {
$("#example").dblclick(function() {
alert("Hello");
});
});
これには次の利点があります。
ondblclick
- コードの複数の異なる部分が同じオブジェクトで競合しないイベント ハンドラーを使用できるようにするHTML からアクセスする場合、関数はグローバル (実際には window オブジェクトのプロパティ) である必要があります。ただし、ベスト プラクティスは、代わりに名前空間を使用して、グローバル変数と関数を避けることです。
// let's publish our namespace to window object
if (!window.myNamespace){
// creating an empty global object
var myNamespace = {};
}
// and add our function to it
$(document).ready(function() {
myNamespace.example = function(){ alert("hello"); }
});
次のように HTML で使用できます。
<img src="..." ondblclick="myNamespace.example()" />
最良のオプションは、単に関数を外部で定義することdocument.ready()
です。$(document).ready()
イベント内で関数を定義する必要はありません。関数内で関数を呼び出す場合$(document).ready()
、ドキュメントの準備が整っていることが保証されます。
ただし、次のように、グローバル ウィンドウ オブジェクトで関数を定義することもできます。
$(document).ready(function() {
window.example = function(){ alert("hello") }
});
@Esailijaは正しく回答しましたが、そのままにしておきたい場合は、削除var
してグローバルにします。
var example;
$(document).ready(function() {
example = function() {
alert("hello")
}
});
var
変数/関数/オブジェクトを配置しない場合、グローバルになります。あなたを使用して、関数var
内でそのコンテキストを設定していました。document.ready
関数宣言を DOM 対応ハンドラーの外に移動することもできます。
function example(){ alert("hello") }
$(document).ready(function() {
// code
});
しかし、より良い解決策は、JavaScript を .js ファイルに保持し、インライン イベント ハンドラーを避けることです。要素に id を付けてフェッチします。
<img src="..." id="imgid" />
$(document).ready(function() {
document.getElementById("imgid").ondblclick = function(){ alert("hello") }
});