電子書籍の厳選無料作品が豊富!

jQuery(v1.3.2), jQuery.msgBox( http://jquerymsgbox.ibrahimkalyoncu.com/ ) v0.9を使用して、スクリプトを書いています。以下の様なコードなのですが、期待した動作にならないため、誤りなど指摘していただければ幸いです。
-----------------
$('.target').click(function(){
$.msgBox({
title: 'title',
content: 'content',
type: 'confirm',
buttons: [{ value: 'yes' }, { value: 'no' }, { value: 'cancel' }],
success: function (result) {
if (result == 'yes') {
$.post(
'//***.php',
{ key: 'val' },
function(data){
if ( data.indexOf('success') !== -1 ) {
$(this).addClass('success').css({'background-color':'#FF6600'});
}
}
);
}
}
});
});
------------------
流れとしては、
1.class="target"であるいくつかの要素のうち、いずれかをクリック
2.msgBoxでダイアログボックスを表示し、動作を継続するか確認
3.$.postを用いて、クリックした要素に含まれる情報を処理用phpに投げる
4.処理用のphpは動作が正常に終了すると"success"を出力、これをjsで取得して判定
5.phpが動作を正常に終了したら、クリックした要素だけにclassを追加、スタイル変更
としたいです。
現在4番までは動作確認が取れ、phpの処理および判定(alertで確認)は成功しているのですが、最後の5番のみがうまくいきません。恐らくthisがうまく動作していないものと考えられますが、jQueryはあまり経験がないので原因が特定出来ません。
どうかよろしくお願い致します。

A 回答 (1件)

callbackの中でthis値に何が指定されているのかは調べていませんが、とりあえずの方法として…



イベント処理の関数には、発生要素がthis値にセットされて渡されるはずなので、
 最初に、that = $(this); とでもしておいて、
 callback内では、that.addClass(~~
のように参照するのではいかがでしょうか。(未検証)
    • good
    • 0
この回答へのお礼

回答有り難うございます。グローバル変数に格納しておけばよかったのですね、とても勉強になりました。

お礼日時:2013/07/14 18:13

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!