javascript - jQuery $(this) does not insert text into my element -


i adding flagging functionality project of mine, , can't jquery's $(this) selector work.

the goal of change text in div flag flagged when user clicks it, , ajax query runs successfully. html/php is:

<div class="flag" post_to_flag='".$post_to_flag."'>flag</div> 

and javascript deals div is:

$('.flag').live('click', function () {     $.post('../php/core.inc.php', {         action: 'flag',         post_to_flag: $(this).attr('post_to_flag')     }, function (flag_return) {         if (flag_return == 'query_success') {             $(this).text('flagged');         } else {             alert(flag_return);         }     }); }); 

i can't replace text flagged, if replace this selector .flag selector, replace class of flag on page.

i have checked, , $(this) selector getting attribute of 'post_to_flag' fine. why happening, , how can fix it?

you should add context variable:

$('.flag').live('click', function () {     var $context = $(this);     $.post('../php/core.inc.php', {         action: 'flag',         post_to_flag: $context.attr('post_to_flag')     }, function (flag_return) {         if (flag_return == 'query_success') {             $context.text('flagged');         } else {             alert(flag_return);         }     }); }); 

you calling multiple functions within jquery selection call. when go $.post() function, scope changes. this refers different scope when inside one().

@moak's suggestion, if set variable jquery object, it's best denote variable beginning $ potential clarity future readers or yourself.


Comments

Popular posts from this blog

linux - xterm copying to CLIPBOARD using copy-selection causes automatic updating of CLIPBOARD upon mouse selection -

c++ - qgraphicsview horizontal scrolling always has a vertical delta -