传递背景"这个"从一个功能到另一个内部呢?

时间:2016-05-17 04:57:37

标签: javascript jquery html

我正在用表格练习ajax,并且......我想为了学习而越来越多地迷惑自己。

这可能没有任何意义,但我试图记录名字和姓氏,特别是通过conLog函数。但它显示为未定义,因为我认为上下文"这"不存在,我不确定如何设置它。我设法将它设置在ajax中。

因此,如果您打开日志,第二行显示未定义,而在第一行中,将记录第一个表单的输入。

https://jsfiddle.net/2oLjqv7c/3/

假设存在问题,我该如何通过"这个"进入conLog?

提前谢谢!我发现了一些同样问题的帖子,但感叹......我想我无法掌握它,除非它适用于我的个人问题(仍然需要学会阅读其他人的问题)。 s码我猜)。

HTML

<form action="/echo/html/" id="form1" method="post">
  First Name:
  <input type="text" value="first" id="firstName">
  <br/>
  Last Name:
  <input type="text" value="last" id="lastName">
  <br/>
  <button type="submit" form="form1" value="submit">Submit</button>
</form>

使用Javascript / jQuery的

function Display(el) {
    this.el = el;
  this.firstName = this.el.find("#firstName");
  this.lastName = this.el.find("#lastName");
  var confirmation = this;
    this.el.on('submit', function(e) {
        e.preventDefault();
    $.ajax('/echo/html/', {
        success: function() {
        console.log('success' + " " + this.firstName.val());
        this.conLog(this.firstName.val(), this.lastName.val());
      },
      error: function() {
        console.log('fail');
      },
      timeout: 3000,
      context: confirmation
    });
  });

  this.conLog = function(first, last) {
    this.first = this.first;
    this.last = this.last;
    console.log(this.first + " " + this.last);
  };
}

$(document).ready(function() {
    Display($('#form1'));
})

3 个答案:

答案 0 :(得分:1)

我想这就是你要找的东西。 我修改了您的fiddle以将名称输出到<p>元素。 我刚刚修改了consLog的道具的分配方式:

  this.conLog = function(first, last) {
    this.first = first;
    this.last = last;
    console.log(this.first + " " + this.last);
    document.getElementById("name").innerHTML = this.first + " " + this.last;
  };

答案 1 :(得分:1)

您无需通过this。因为您已经传递了firstlast参数。只需直接使用这些:

this.conLog = function(first, last) {
  console.log(first + " " + last);
};

注意我将this.firstthis.last更改为firstlast

答案 2 :(得分:1)

所以有很多方法可以实现这一目标......最简单的方法之一是将var self = this;设置在this.el = el;的上方或周围,无论你的功能有多深,通过利用Javascript的功能范围,始终使用此引用。如果你说你正在学习我建议你调查Function.bind Function.call and Function.apply这与你的问题有关...... MDN总是一个很好的起点..