无法获取点击表单的操作链接

时间:2013-08-03 02:25:54

标签: jquery html

我只是想获取提交表单的操作链接, 但是点击提交警报未定义

$(document).on("submit","form",function(e){
     e.preventDefault();
     if($(this).children("input[type=submit]").hasClass("load") && $(this).children("input[type=submit]").hasClass("last-button"))
     {
        setTimeout(function(){
        alert($(this).attr("action"));
        //      $.post($(this).attr('action') , $(this).serialize() , function(data){
        //  $(".wholepage").html(data); 
        //  });
        },400);
     }
 });

HTML

<div class="well login">
    <form id="reg" action="parts/background/regProcess.php" method="post">
         <input placeholder="Choose an username" type="text" name="user"><br/><br/>
         <input placeholder="Choose a password" type="password" name="pass1"><br/><br/>
         <input placeholder="Input the password again" type="password" name="pass2"><br/><br/>
         <input placeholder="Enter your E-mail address" type="text" name="email"><br/>
         <input type="submit" class="last-button load" value="SUBMIT">   
    </form>
</div>

2 个答案:

答案 0 :(得分:1)

您需要在超时功能之前存储$(this)

$(document).on("submit","form",function(e){
  e.preventDefault();
  var $this = $(this);
  if($(this).children("input[type=submit]").hasClass("load") && $(this).children("input[type=submit]").hasClass("last-button"))
  {
    setTimeout(function(){
      var relPath = $this.attr("action");
      var absPath = $this.prop("action");
      alert(relPath);
      //      $.post($(this).attr('action') , $(this).serialize() , function(data){
      //  $(".wholepage").html(data); 
      //  });
    },400);
  }
});

这是一个小提琴:http://jsfiddle.net/vMbHS/

答案 1 :(得分:1)

另一种解决方案是使用bind绑定this

$(document).on("submit","form",function(e){
     e.preventDefault();
     if($(this).children("input[type=submit]").hasClass("load") && $(this).children("input[type=submit]").hasClass("last-button"))
     {
        setTimeout((function(){
        alert($(this).attr("action"));
        //      $.post($(this).attr('action') , $(this).serialize() , function(data){
        //  $(".wholepage").html(data); 
        //  });
        }).bind(this),400);
     }
 });

这将创建一个更易于维护的代码,因为该函数与父函数的变量松散紧密。