2012-12-04 34 views
0

我有一个ajax提交,无论我尝试过什么都不会运行。直到我找到一个包含$(function() {});调用的提交的教程。然后我在一个函数调用中包装了我的.submit,它似乎已经工作。令我难以置信的是,我有其他的.submit函数调用,而且不会被包装在函数中。我想知道如果我在这里错过了一个我不明白的jQuery细微差别吗?

为了更充分地说明我的意思,这里是我的功能之前和之后我在一个函数把它包起来......

之前...

$("#FormPutMsg1").submit(function (e) { 
    debugger; 
    e.preventDefault(); 
    //animateSpinner(); 
    var theURL = this.action; 
    var type = "POST";//this.methd; 
    var data = $(this).serialize(); 
    $.ajax({ 
     url: this.action, 
     type: this.method, 
     data: $(this).serialize(), 
     dataType: "json", 
     success: function (result) { 
      debugger; 
      var data = result; 
      if (data.split(':')[0] == "Error") { 
       //$("#list").unblock(); 
       $('#resultDiv').html('<b><p style="color: #ff00ff">' + data + '</p></b>'); 
       setTimeout(function() { 
        $('#resultDiv').html(""); 
       }, 10000); 
      } 
      else { 
       binddata(data); 
      } 
     } 
    }); 
    return false; 
}); 

后(这一个工程)。 ..

$(function() { 
    $("#FormPutMsg1").submit(function (e) { 
     debugger; 
     e.preventDefault(); 
     //animateSpinner(); 
     var theURL = this.action; 
     var type = "POST";//this.methd; 
     var data = $(this).serialize(); 
     $.ajax({ 
      url: this.action, 
      type: this.method, 
      data: $(this).serialize(), 
      dataType: "json", 
      success: function (result) { 
       debugger; 
       var data = result; 
       if (data.split(':')[0] == "Error") { 
        //$("#list").unblock(); 
        $('#resultDiv').html('<b><p style="color: #ff00ff">' + data + '</p></b>'); 
        setTimeout(function() { 
         $('#resultDiv').html(""); 
        }, 10000); 
       } 
       else { 
        binddata(data); 
       } 
      } 
     }); 
     return false; 
    }); 
}); 

之前,我在常规提交功能prevaled功能包裹着我的功能(因为e.preventDefault从来没有叫我相信)。我错过了一些先生们(和女士)?

回答

1

原始代码块永远不会被执行,因为“#FormPutMsg1”将不会存在。第二个代码块在加载页面后执行,因此将存在“#FormPutMsg1”。

$(“#FormPutMsg1”)。submit()需要触发器才能执行。用“$(function(){})”包装它将在页面加载时执行该块。您也可以使用点击事件触发它。

“$(函数(){})” 是一个快捷键 “$(文件)。就绪(函数(){})”

+0

我不是故意在这里引起争议,但我的代码确实如此。它不包含在documenet.ready或任何类型的函数调用中。但是代码仍然执行。我必须在那里丢失一些东西。 – SoftwareSavant

+0

'后'代码包装在“$(function(){})”中。我很困惑,为什么你说它不是。 “$(function(){})”将在页面加载后执行代码。 –

+0

我的意思是说我在其他地方没有包含其他代码,或者确实有效。 – SoftwareSavant

1

根据我的专业知识(这是不完全真棒)我认为“$(function(){})”与document.ready相同。

唉,这个函数中的脚本将在DOM完全加载时执行。

在第一种情况下,脚本在你的元素被加载之前试图执行,因此它不起作用。

在第二种情况下,脚本一直等到DOM中的所有元素都被加载后才执行。