2012-03-09 143 views
1

我有一個CF頁面有一個CFdiv。 Cfdiv綁定到頁面上的元素。主頁面包含腳本。沒有任何腳本在CFdiv中的元素上執行。 ajax調用似乎有問題。當我拿出這些代碼時,其餘的代碼似乎在Firebug中啓用,但仍然不會執行。Jquery cfml - 腳本都不可執行

<script type="text/javascript"> 
    $(document).ready(function() { 
    $('#candidatesubmit').on('click', function() { 
     $.ajax({ 
     type: 'POST', 
     url: 'actEditStatusForm.cfm', 
     data: 'form=', 
     error: function (xhr, textStatus, errorThrown)(
     // show error 
     alert(errorThrown);), 
     success: function (response1, textStatus, jqXHR)(
     alert('success');) 
     }); 
    ColdFusion.Grid.refresh('candidatesGrid', true); 
    }); 
    $(function() {$("#JDOrgChartRESOutlineSentToCand").datepicker({dateFormat: 'yy/mm/dd'});}); 
    $(function() {$("#IndepthWRec").datepicker({dateFormat: 'yy/mm/dd'});}); 
</script> 

回答

4

首先,您有一些語法錯誤。也許這只是上面粘貼的問題,而不是真正的代碼。但請確保錯誤和成功函數的主體由大括號包圍,而不是括號。

因此,不是這樣的:

error: function (xhr, textStatus, errorThrown)(
    alert(errorThrown);), 

你應該有這樣的:

error: function (xhr, textStatus, errorThrown) { 
    alert(errorThrown); 
}, 

其次,網格刷新Ajax調用成功函數外。由於該調用是異步的,網格刷新很可能在該調用完成之前運行。移動刷新到您的成功回調函數,就像這樣:

success: function (response1, textStatus, jqXHR){ 
    ColdFusion.Grid.refresh('candidatesGrid', true); 
    alert('success'); 
} 

第三,如果CFDIV的內容被異步加載,且#candidatesubmit元素是動態加載的內容裏面,你的功能將不會被綁定到它的click事件,因爲當主頁的ready事件被觸發時它不會出現。

因此,不是直接綁定到元素,而是通過偵聽封閉元素上的事件來使用委派策略,該元素將在初始頁面加載中出現。因此,而不是這樣的:

$('#candidatesubmit').on('click', function() { 

嘗試是這樣的:

$('#some_outer_div').on('click','#candidatesubmit', function() { 

#some_outer_div現在將監聽任何點擊事件冒泡從它的後代元素(即使是那些不在場的時候頁面第一個加載)。如果其中一個點擊的目標是#candidatesubmit,處理程序將會觸發。

+0

我似乎總是被抓到成功回調。雖然很棒。很棒。 – user990016 2012-03-11 12:11:27