2012-03-09 66 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