如何在此上下文中检索当前表单

时间:2014-08-26 15:04:32

标签: jquery forms

我想知道一旦发出请求后如何访问此特定表单元素的$(this)。我对这里的范围有点不清楚。

赞赏任何人的眼睛!

干杯

代码在这里:

 $('form', document).on('submit', function(event) {
    event.preventDefault();
    var self = $(this);
    $(this).attr('disabled', 'disabled');

    var temp_url = $(this).find(".web_url");
    var lasturl;
    $.each(temp_url,function(key,object){
        if(key==(temp_url.length-1))
        {
            lasturl = object.value;
        }
    });

    var temp_wdth = $(this).find(".width");
    var lastwdth;
    $.each(temp_wdth,function(key,object){
        if(key==(temp_wdth.length-1))
        {
            lastwdth = object.value;
        }
    });

    var temp_hgth = $(this).find(".height");
    var last_hgth;
    $.each(temp_hgth,function(key,object){
        if(key==(temp_hgth.length-1))
        {
            last_hgth = object.value;
        }
    });

    var weburl = lasturl;
    var width = lastwdth;
    var height = last_hgth;
    var dee = <?php echo $deet[0]->id; ?>;


    $.post( "mde", { weburl: weburl, width: width, height: height, dee: dee })
      .done(function( data ) {
         u = data;
         if (u == 'url not set')
         {
            alert(u);
         }
         else
         {
            self.hide();
            console.log(u);
            $.get(u);

         }

    });
});

1 个答案:

答案 0 :(得分:0)

简单的选择是添加&#39; var self = this&#39;在顶部。然而,这是一个无视javascript内置的上下文功能的黑客。一个更好的选择是使用javascript,因为它打算使用并在$ .post()中的匿名函数上实现.bind()。

创建函数时,您可以使用.bind()明确告诉javascript运行它的上下文。

这是一个例子。假设我们有一个保存到变量bob的对象。它有一个名称&#39;,其值为&#34; Bob&#34;。

bob = {name: "Bob"}

我们希望制作一个返回鲍勃名字的功能。所以我们可以创建一个返回&#39; this.name&#39;并将其绑定到bob对象。

function introduceBob(){
  return this.name
}.bind(bob)

通过将它绑定到bob,该函数将执行,就像它是bob对象的一部分一样。任何事情都发生在这个&#39;将引用该对象。当我们致电introduceBob()时,它会返回'Bob'

在您的情况下,我们希望在深入研究匿名函数时维护当前上下文。换句话说,我们想要这个&#39;在该匿名函数中引用与&#39;这个&#39;相同的对象。在.on()函数中。为此,您可以更改此代码:

    $.post( "mde", { weburl: weburl, width: width, height: height, dee: dee })
      .done(function( data ) {
         u = data;
         if (u == 'url not set')
         {
            alert(u);
         }
         else
         {
            console.log(u);
            $.get(u);
         }
    });

到此代码:

    $.post( "mde", { weburl: weburl, width: width, height: height, dee: dee })
      .done(function( data ) {
         u = data;
         if (u == 'url not set')
         {
            alert(u);
         }
         else
         {
            console.log(u);
            $.get(u);

         }

    }.bind(this));

简单的改变吧?现在&#39;这个&#39;匿名函数内部将使用相同的上下文作为&#39;这个&#39;在.on()函数的其余部分。

注意:你仍然需要jQuery选择&#39;这个&#39;为了在其上调用jQuery方法。

.bind(),上下文和/或范围的其他资源:

.bind() on MDN
Ryan Morr's Understanding Scope and Context in Javascript