忍者ブログ

ひつ(じのひよこが)プログラミングします。
お仕事や趣味で困ったこととか、何度も「あれ?どうだったかしら」と調べたりしたこととか、作ったものとか、こどものこととかを書きます
★前は週末定期更新でしたが今は不定期更新です

2024/11    10« 1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28  29  30  »12

contenteditable な要素で change イベントを発火させる

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

コメント

ただいまコメントを受けつけておりません。

contenteditable な要素で change イベントを発火させる

contenteditable

編集可能な要素。例えば、この赤い文字は contenteditable なので編集できるはず

contenteditable の問題点:change イベントが発火しない

input じゃない要素を入力欄にしたい時に contenteditable は便利に見える。しかし、こいつ、 change イベントが発火しないのだ。change イベントをトリガーにして何かするのには使えない。

<div id='all'>
	<div name='a' contenteditable='true' style='border:3px solid black;'>ひつつん</div>
	<div name='b' contenteditable='true' style='border:3px solid black;'>ちわわとちくわ</div>
	<div name='c' contenteditable='true' style='border:3px solid black;'>ひよよん</div>
	<input name='d' type='text' value='これは特に設定しなくても change イベントが発生する' />
</div>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script>
$('#all').change(function(e){alert($(e.target).attr('name'));});
</script>

とりあえず考えた解決策 change イベントを発火するようにする

次の JavaScript を埋め込むことで contenteditable に変更が発生した場合に change イベントを発火させられる。とりあえず手元の Google Chrome と FireFox では問題なく動いた。

function bindContenteditableChangeEvent(){
	var $contenteditables = $("[contenteditable='true']");
	var text = '';

	$contenteditables.on('focus', function(e){
		text = $(e.target).html();
	});

	$contenteditables.on('focusout', function(e){
		if(text !== $(e.target).html()){
			$(e.target).trigger(new $.Event('change'));
		}
	});
}

bindContenteditableChangeEvent();
PR

コメント

ただいまコメントを受けつけておりません。

ブログ内検索

P R