日期:2014-05-16  浏览次数:20408 次

jquery 代码this的用法
如下的一段代码有什么问题,请指教:带注释的地方有问题
  var thisPage = {
  initialize: function () {
  this.initializeDom();
  this.initializeEvent();
  },
  initializeDom: function () {
  this.$ipreadws = $("#ipreadws");
  this.$slRmd = $("#slRmd");
  this.$slRField = $("#slRField");
  this.$divResult = $("#divconsole");
  },
  initializeEvent: function () {
  this.$ipreadws.bind("blur", this.onInputReadMouseout.proxy(this));
  this.$slRmd.click(function (event) {
  if (this.$ipreadws.val() != "") {
  alert('click me ');
  $.get("../Logic/Excutews.ashx", { "wstype": "read", "url": this.$ipreadws.val() }, function (data) {
  alert(data);
  $divResult.innerText(data);////////////////////////就是这行有问题,打了断点,但是貌似运行不到
  });


  }


  } .proxy(this));
  },
  onInputReadMouseout: function () {
  if (this.$ipreadws.val() === "") {
  alert("请输入读服务地址!");
  }
  }
  }
  $(thisPage.initialize());

上面那句  $divResult.innerText(data);有问题不能正常运行



------解决方案--------------------
$divResult.innerText(data);////////////////////////就是这行有问题,打了断点,但是貌似运行不到

运行不到可能是没有执行函数,或者函数前面出错之类,当然也可能是调试方式错误

判断是代码出错,这儿的$divResult是指前面的this.$divResult么?
不能这样访问,当然用this.$divResult访问也是不行的,因为这儿this应该指代window
这样改:
var _this=this;
$.get("../Logic/Excutews.ashx", { "wstype": "read", "url": this.$ipreadws.val() }, function (data) {
alert(data);
_this.$divResult.innerText(data);/////////
});

那为什么$.get传参时候,用this.$ipreadws.val() 可以呢 
这个就需要经验加理解了,作用域与回调函数内的确是不同的,传参时this指代还是thisPage,但在回调函数中this指代window了(因为由thisPage调用);

还有一问,我刚开始引用了1.7.2 版本的jquery库文件,但是我修改成1.8.0 <script src="../js/jquery-1.8.0.js" type="text/javascript"></script>之后,编译的时候还用的是1.7.2 的,这是为何呢?
这个挺奇怪,没遇到过这种情况,是浏览器缓存造成的?