2016-05-17 60 views
0

我正在用形式练习ajax,并且..我想为了学习而越来越多地混淆自己。将上下文“this”从一个函数传递到另一个函数中?

这可能没有任何意义,但我试图记录姓氏,特别是通过conLog函数。但它显示为未定义,因为我认为上下文“this”不存在,我不知道如何设置它。然而,我设法将它设置在ajax里面。

所以如果你打开日志,第二行表示未定义,而在第一行中,记录来自第一个表单的输入。

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

假设这就是问题所在,我该如何通过 “本” 到CONLOG?

在此先感谢!我发现有几个帖子提出了同样的问题,但感叹......我想我不能理解它,除非它适用于我个人的问题(我仍然需要学习阅读其他人的代码)。

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')); 
}) 

回答

1

你并不需要通过this。因为您已经通过了firstlast参数。只要使用这些直接像这样:

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

注意我改变this.firstthis.last只是firstlast

+0

德哦!谢谢!! – giantqtipz

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

所以有很多方法可以达到这个目的...最容易的一种方法是在以上或其附近设置var self = this;,无论您的功能有多深,您都可以使用此参考。利用Javascript的功能范围。如果你喜欢你说你正在学习,我建议你看看Function.bind Function.call and Function.apply这都涉及到你的问题... MDN始终是一个很好的开始..

相关问题