javascript - Does a clicked on item go out of scope when going into the getJSON section -
when clicking on list item, go out of scope when going getjson section want go , data database?
i have list of items displaying colours. each list item has id set of sku. when click on list item, must go , data database sku , populate contents on page.
i playing around code , interest's sake wanted see if change text of clicked on list item. after json call done, tried set text, nothing happened.
i sku of clicked on list item this:
var sku = this.id; after json call tried set text of clicked on list item this:
this.text('sample text'); i tried:
this.text('sample text'); here full javascript/jquery code:
<script> $(document).ready(function () { $('.attributes li').click(function () { var url = 'www.example.com/test-url'; var sku = this.id; $.getjson(url, { sku: sku }, function (data) { // not work this.text('sample text'); }); }); }); </script> here html markup:
<ul class="list-inline attributes selectable"> <li id="sku0001">blue</li> <li id="sku0002">green</li> <li id="sku0003">red</li> <li id="sku0004">yellow</li> </ul> when going getjson section this go out of focus? clicked on list item go out of scope?
yes!! when gets .getjson, this loose context , this refer callback function of $.getjson , no more referring li. suggest create instance of this outside $.getjson var that=this , assign that.text inside $.getjson
example:
$(document).ready(function () { $('.attributes li').click(function () { var that=this; var url = 'www.example.com/test-url'; var sku = this.id; $.getjson(url, { sku: sku }, function (data) { // here not work because refers callback function that.text('sample text'); //assign referred }); }); }); alternatively, if using ajax add option called context refer this anywhere inside ajax
$('.attributes li').click(function () { var url = 'www.example.com/test-url'; var sku = this.id; $.ajax({ url : url, datatype : 'json', data:{sku:sku}, context : this, //add complete : function (data) { // 'this' passed context $(this).text('sample text') } }); });
Comments
Post a Comment