2010-12-30 11 views
2

私はjQueryを使用してプロジェクトのリストを繰り返します。すべてのプロジェクトが画面に表示され、ドラッグ可能です。また、非常にプロジェクトにはテキストエリアがあります。jQuery - ユーザーがテキストエリアのコンテンツを編集したイベント

ソースコード:

$.each(data, function(id, project) { 
    $('#projects').append('<div class="note" data-projectid="'+project.id+'"><textarea class="edit">'+project.text+'</textarea></div>'); 
}); 
$(".note").draggable({ 
    containment: "#projects", 
    scroll: false 
}); 

私が欲しいもの、ユーザーがプロジェクトのテキストを変更するかどうかを知ることですので、私はカーソルがテキストエリアを離れたかどうかを知る必要があります。そして私は新しいテキストとデータプロジェクトIDを知る必要があるので、新しいテキストをバックエンドシステムにあるデータベースに保存することができます。

ご協力いただきありがとうございます。

+0

「カーソルがテキストエリアを離れる場合」は、テキストを変更したことを意味しますか?キーボードだけを使用している場合はどうなりますか? – NickAldwin

+0

「フォーカスが失われたら」と思っています。 – Tim

答えて

3

あなたは、ユーザーが<textarea>要素の内容を編集した場合、textarea.edit要素でchangeイベントをリッスン#projects要素にa .delegate()ハンドラを置くかを知りたいと言っている場合。

$('#projects').delegate('textarea.edit','change',function() { 
    alert('was changed'); 
}); 

これは、ページが読み込まれたときに一度だけ実行します。 #projectsコンテナに追加するすべての<textarea>要素に対して機能します。

+1

私は '変化'と信じています、 'textarea.edit'は 'textarea.edit'、 'change'でなければなりません – PleaseStand

+0

@idealmachine:そうです。私はそれを反転させた、私は別の編集をしていたときにあなたの修正を上書きしました。それから私はあなたのところに戻ってくるつもりだったが、代わりに私の元に戻った。今修正されました。ありがとう。 :o) – user113716

+0

しかし、 'data-projectid'にどうやってアクセスすることができますか?これをテキストエリアにも入れて、' $(this).data( "projectid") 'でアクセスする必要がありますか? – Tim

2

テキストの変更は、onchangeイベントが発生すると、カーソルがそれを離れたとき、onblurイベントがトリガされます。

$('.edit').change(function(){ 
    alert(this.value); 
}); 

$('.edit').blur(function(){ 
    // cursor left text area 
}); 
+2

明確にするために... onchangeは、ユーザーがテキストを編集してから*カーソルが入力を離れるときに発生します。だから、テキストが以前と同じかどうかをチェックする余分なテストがある点を除いて、onblurのようなものです。 –

+0

'blur'関数が動作しますが、data-projectidも必要です。通常は '$(this).data(" projectid ")でアクセスできます。 – Tim

+0

@Tim:タグの属性なので、これを試してみてください:' $( 'div.note')。attr( 'data-projectid') ' – Sarfraz

1

あなたが探しているイベントが.blur(である)、このイベントは、ときに実行されます要素はフォーカスを失います。

$.each(data, function(id, project) { 
    $('#projects').append('<div class="note" data-projectid="'+project.id+'"><textarea class="edit">'+project.text+'</textarea></div>'); 
    $('textbox').blur(function() { 
     $(this).val(); //gives you the current value of the box. 
     //then do what you need with that info. also the project obj is still available to get project.id from 
     var data-projectid = project.id 

    }); 
}); 
+0

これは私にとってはうまくいくものですが、ここでデータプロジェクトIDにアクセスするにはどうしたらいいですか? – Tim

+0

$ .each()のコンテキストの中にあるようにコードを更新し、あなたのappendのようにプロジェクトobjにアクセスできるようにしました。 – jondavidjohn

+0

データベースコンテンツを更新する必要があるため、ユーザーがテキストエリアを出る場合は、 'data-projectid'の値が必要です。したがって、IDが必要になります。 – Tim

関連する問題