原因は ShunsukeIzui さんの仰る通りだと思います。
一つ気になったのですが、$(.hoge).val()
の行で SyntaxError
になりますね(セレクタが文字列化されていません)。
その部分を修正してハンドラ関数を一つにまとめたコードが下記になります。
(2016/2/3 16:33追記) jsfiddle で jquery.js を読み込む設定にしていなかったのと修正
HTML
1<input class="hoge" value="replaced!" />
2<p id="sample-1">#sample-1</p>
3<p class="hoge-hoge">Hello, World!</p>
4<p class="hoge-hoge">Hello, World!</p>
5<p id="sample-2">#sample-2</p>
6<p class="hoge-hoge-hoge">Hello, World!</p>
7<p class="hoge-hoge-hoge">Hello, World!</p>
8<script>
9'use strict';
10jQuery(function (jQuery) {
11 function handleClick (event) {
12 var data = event.data;
13
14 data.element.text(data.value);
15 }
16
17 function main () {
18 var value = jQuery('.hoge').val();
19
20 jQuery('#sample-1').on('click', {element: jQuery('.hoge-hoge'), value: value}, handleClick);
21 jQuery('#sample-2').on('click', {element: jQuery('.hoge-hoge-hoge'), value: value}, handleClick);
22 }
23
24 main();
25});
26</script>
(2016/2/3 18:33追記)
別解。data-*
独自属性を使えばスマートに書けます。
HTML
1<input class="hoge" value="replaced!" />
2<p id="sample-1" class="foo" data-target-selector=".hoge-hoge">#sample-1</p>
3<p class="hoge-hoge">Hello, World!</p>
4<p class="hoge-hoge">Hello, World!</p>
5<p id="sample-2" class="foo" data-target-selector=".hoge-hoge-hoge">#sample-2</p>
6<p class="hoge-hoge-hoge">Hello, World!</p>
7<p class="hoge-hoge-hoge">Hello, World!</p>
8<script>
9'use strict';
10jQuery('.foo').on('click', {value: jQuery('.hoge').val()}, function handleClick (event) {
11 jQuery(this.getAttribute('data-target-selector')).text(event.data.value);
12 jQuery(this).off(event.type, handleClick); // 2回目以降は無意味なのでイベントを削除しておく
13});
14</script>
Re: mhl さん
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/02/03 07:29
2016/02/18 02:34