struts2、ajax和注入的jquery标记

struts2、ajax和注入的jquery标记,jquery,ajax,struts2,struts2-jquery,Jquery,Ajax,Struts2,Struts2 Jquery,我正在使用struts2.3和struts2 jQuery插件 我必须使用ajax动态加载操作的结果。 在JSP中有一些普通的html和jQuery标记 <sj:datepicker cssClass="dataScadenzaDiv" id="dataScadenzaDiv" name="dataScadenza" maxDate="-1d" label="data scadenza" theme="xhtml"/> 一切正常,ajax注入的代码如下: &l

我正在使用struts2.3和struts2 jQuery插件

我必须使用ajax动态加载操作的结果。
在JSP中有一些普通的html和jQuery标记

<sj:datepicker cssClass="dataScadenzaDiv" id="dataScadenzaDiv"
        name="dataScadenza" maxDate="-1d" label="data scadenza"  theme="xhtml"/>

一切正常,ajax注入的代码如下:

<!-- lotto dpi -->
<tr>
<td class="tdLabel"><label for="lotto" class="label">Lotto:</label></td>
<td><input type="text" name="txtLotto" size="15" value="" id="lotto"/></td>
</tr>

<!-- tGestDataScadenza -->
<div id="dataScadenzaAjax"></div>
<input type="text" name="dataScadenza" value="" id="dataScadenzaDiv"     class="dataScadenzaDiv" theme="xhtml"/><script type='text/javascript'>
jQuery(document).ready(function () {
jQuery.struts2_jquery_ui.initDatepicker(false);
});
jQuery(document).ready(function () {
var options_dataScadenzaDiv = {};
options_dataScadenzaDiv.showOn = "both";
options_dataScadenzaDiv.buttonImage = "/RadioFrequenza2/struts     /js/calendar.gif";
options_dataScadenzaDiv.maxDate = "-1d";
options_dataScadenzaDiv.jqueryaction = "datepicker";
options_dataScadenzaDiv.id = "dataScadenzaDiv";
options_dataScadenzaDiv.name = "dataScadenza"; jQuery.struts2_jquery_ui.bind(jQuery('#dataScadenzaDiv'),options_dataScadenzaDiv    );

});
</script>

大乐透:
jQuery(文档).ready(函数(){
jQuery.struts2\u jQuery\u ui.initDatepicker(false);
});
jQuery(文档).ready(函数(){
var options_dataScadenzaDiv={};
选项\u dataScadenzaDiv.shown=“两者”;
选项_dataScadenzaDiv.buttonImage=“/RadioFrequenza2/struts/js/calendar.gif”;
选项\u dataScadenzaDiv.maxDate=“-1d”;
选项\u dataScadenzaDiv.jqueryaction=“日期选择器”;
选项\u dataScadenzaDiv.id=“dataScadenzaDiv”;
options_dataScadenzaDiv.name=“dataScadenza”jQuery.struts2_jQuery_ui.bind(jQuery('dataScadenzaDiv'),options_dataScadenzaDiv);
});
但是现在
被呈现为普通文本 和点作为日期选择器。
我认为注入的javascript没有被执行


我能做什么?

问题是struts2 jQuery插件正在生成一个脚本,该脚本将在DOM就绪后运行:
jQuery(document).ready(function(){…

呈现页面后,会触发ready事件,但在AJAX调用后,不会触发

那么您有两种解决方案:

  • 避免对AJAX返回的JSP代码段使用struts2 jquery插件;改用普通jquery,并避免使用
    jquery(document).ready(函数(){

    (但我想它不会完全可靠)

  • 使用技巧覆盖默认的jQuery就绪事件,以便就绪函数可以触发。
    然后将其作为AJAX返回的JSP片段的最后一行触发

    <sj:datepicker cssClass="dataScadenzaDiv" id="dataScadenzaDiv"
                   name="dataScadenza"        maxDate="-1d" 
                   label="data scadenza"      theme="xhtml"/>
    <script>
         $.triggerReady();
    </script>
    
    请记住,最初在ready事件中运行的其他处理程序也将再次触发,因此请谨慎使用。

    您是否已在头部插入标记?javascript控制台中是否有任何日志消息?
    <input type = "button" 
          value = "trigger ready event" 
        onclick = "$.triggerReady();" />
    
    // Overrides jQuery-ready and makes it triggerable with $.triggerReady
    // This script needs to be included before other scripts using the jQuery-ready.
    // Tested with jQuery 1.10.1
    (function(){
    var readyList = [];
    
    // Store a reference to the original ready method.
    var originalReadyMethod = jQuery.fn.ready;
    
    // Override jQuery.fn.ready
    jQuery.fn.ready = function(){
    if(arguments.length && arguments.length > 0 && typeof arguments[0] === 'function') {
      readyList.push(arguments[0]);
    }
    
    // Execute the original method.
    originalReadyMethod.apply( this, arguments );
    };
    
    // Used to trigger all ready events
    $.triggerReady = function() {
      $(readyList).each(function(){this();});
    };
    })();
    
    
    /* This part is for demo only and should be removed */
    $( document ).ready(function(){
        alert('document.ready is fired!');
    });