前回の投稿の続きです。
追加した要素にすでにあるイベントの処理を再設定したい
前回の投稿で追加した要素に対して、イベントハンドラを再登録する方法を学べました。
個人的に関数を宣言しておき、それをonイベントで再登録する方法が一番シンプルでいいなと思ったのですが。
引数がある場合はどのような書き方になるのでしょうか?
例えばこのような場合です。
javascript
1function handleClick (_this) { 2 console.log(_this.val()); 3}
このような書き方でいけるかと試したのですが、handleClick is not defined のようなエラーが出て実行できませんでした。
javascript
1 2 3// #testBtn をDOMツリーに挿入する 4 5jQuery('#testBtn').on('click', handleClick(this)); 6
書き方が間違っているでしょうか?
それとも書き方はあっているけど他の理由でエラーが出ているのでしょうか?
もしわかる方がいらっしゃったら教えていいただければと思います。
追記
一例ですが、今回のパターンで言うと
<input type="file">を使って画像を表示したいのときです。
以下サイトの $('.fileInput').change(function(){
の中を関数にしたいのです。
FileAPIを使った画像表示
というのも<input type="file">の値を消すのにIEの古いバージョンだと一度このコードを消してしまって
もう一度生成しなければいけないからです。
アップロード時に選択したファイルをクリア
そのとき再度changeイベントを登録するのに、いちいちこの長ったらしいコードを書かずに済むように関数化しておきたいというところです。
javascript
1$('.fileInput').change(function(){ 2 displayImage(this); 3} 4 5 6 7function displayImage(_this) { 8 // 1. 選択されたファイルがない場合は何もせずにreturn 9 if (!_this.files.length) { 10 return; 11 } 12 13 var file = _this.files[0], // 2. files配列にファイルが入っています 14 $_img = $(_this).siblings('img'), // 3. jQueryのsiblingsメソッドで兄弟のimgを取得 15 fileReader = new FileReader(); // 4. ファイルを読み込むFileReaderオブジェクト 16 17 // 5. 読み込みが完了した際のイベントハンドラ。imgのsrcにデータをセット 18 fileReader.onload = function(event) { 19 // 読み込んだデータをimgに設定 20 $_img.attr('src', event.target.result); 21 }; 22 23 // 6. 画像読み込み 24 fileReader.readAsDataURL(file); 25} 26 27 28// displayImage(this)を再登録したい
回答3件
あなたの回答
tips
プレビュー