現在HTML,Javascript(jQuery)を使ってアプリを作っています。
前回の投稿でアドバイスを頂き、自分なりに再登録の方法を模索しました。
追加した要素にすでにあるイベントハンドラを再登録したい2
結果以下のような形でやりたいことは実現できました。thisではなく、jQuery.Eventオブジェクトを使って。
HTML
1<!doctype html> 2<html lang="ja"> 3<head> 4 <meta charset="utf-8"> 5 <title>event.data demo</title> 6 <script src="https://code.jquery.com/jquery-1.10.2.js"></script> 7</head> 8<body> 9<span id="userfile_item"> 10 <input type="file"> 11</span> 12<button>クリア</button> 13<script> 14//ファイルアップロード時 15$('input').on('change',function(ev){ 16 log(ev); 17}); 18 19//ログを出力する関数 20function log(ev){ 21 console.log(ev.target.value); 22} 23 24//クリアボタン押下時 25$('button').on('click',function(){ 26 //IE10以前用にinputタグを再生成する 27 $('#userfile_item').html('<input type="file" name="userfile">'); 28 //イベントハンドラを再登録する 29 $('input').on('change',log); 30}); 31</script> 32</body> 33</html> 34
ただなぜうまくいっているかわからないので教えていただきたいです。
わからないのは、「ev」についてです。
ファイルアップロード時は、
$('input').on('change',function(ev){の「ev」がlog関数への引数として渡され、ログを出力しました。
しかしイベントハンドラ再登録時は、
$('input').on('change',log)で、log関数の引数は設定されておらず、log関数では、log関数のイベントオブジェクトとして「ev」が働いています。
またlog関数が独立的に動くならと,$('input').on('change',function(ev)内のlog関数の引数を取り除き
log();
としたのですが、こうするとevがundifinedとなり、うまく動きませんでした。
このように
$('input').on('change',function(ev)のときは,evが引数として渡され、
$('input').on('change',log);のときは引数として渡してなくとも,log関数内でevを使えている違いは何なのか
を教えていただきたいです。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/04/29 05:20