2015-09-07 78 views
0

當我使用此代碼是我的$。員額()綁定到一個表單,並防止重新加載頁面提交它:

$("#analyze_audio").submit(function (e) { 
    debugger; 
    e.preventDefault(); 
    var url = "/analyze_audio"; 
    var dataToSend = {"analyze_audio": "analyze_audio"}; 
    var callback = function (data) { 
     debugger; 
     document.getElementById("audioresponse").innerHTML = (data); 
    }; 
    $.post(url, dataToSend, callback, 'html'); 
}); 

但它不會觸發我在它使用的調試器,所以它不; t將事件正確綁定到我的函數。但是,當我使用這段代碼片段,它的作品完美:

$(function() { 
    $("#analyze_audio").submit(function (e) { 
     debugger; 
     e.preventDefault(); 
     var url = "/analyze_audio"; 
     var dataToSend = {"analyze_audio": "analyze_audio"}; 
     var callback = function (data) { 
      debugger; 
      document.getElementById("audioresponse").innerHTML = (data); 
     }; 
     $.post(url, dataToSend, callback, 'html'); 
    }); 
}); 

我真的不明白爲什麼?

+0

那是因爲第一個是*錯誤*方式,第二個是*右側*方式。這裏的所有都是它的! – Jamiec

回答

6

當您使用jQuery(您清楚地知道)時,在從瀏覽器接收到「DOM就緒」事件時,將函數包裝到$()中使其成爲庫函數。因此,它會延遲執行代碼,直到完全構建DOM。這使得你的代碼工作,因爲它確保了ID爲「analyze_audio」的元素存在。

$() —這是一個簡單的函數調用,函數名爲$(這是jQuery庫的主要入口點),在語法上沒有任何特殊之處。

您可能會看到代碼,做類似的事情:

$(document).ready(function() { ... }); 

這正是做同樣的事情(並且也是一個jQuery成語)。除非您喜歡輸入多餘的字符,否則沒有理由使用該表單。

3

$(function(){});只是document.ready的快捷方式。它的工作同樣是這樣的:

<script type="text/javascript"> 
     $(document).ready(function() { 
      $("#analyze_audio").submit(function (e) { 
       debugger; 
       e.preventDefault(); 
       var url = "/analyze_audio"; 
       var dataToSend = {"analyze_audio": "analyze_audio"}; 
       var callback = function (data) { 
        debugger; 
        document.getElementById("audioresponse").innerHTML = (data); 
       }; 
       $.post(url, dataToSend, callback, 'html'); 
      }); 
     }); 
    </script> 
1

當你綁定事件的形式#analyze_audio它不存在於DOM呢。如果你把你的腳本放在帶表格的html之後,那麼它就可以工作。或者你可以使用$(document).ready()來添加你的綁定或$(function(){}),這兩個函數將在整個頁面被加載時執行。

相關問題