Javascript打印函数在提交更改时分解下拉表单

Javascript打印函数在提交更改时分解下拉表单,javascript,function,debugging,Javascript,Function,Debugging,我在同一个页面上运行两个函数,一个自动提交一个下拉表单来更新变量,另一个用于打印页面的一部分。它们都按预期工作,除非在我使用打印功能后,它会中断表单提交功能的工作,除非我重新加载页面。不确定为什么或如何解决此问题 <script> $(function() { $('#daterange').change(function() { this.form.submit(); });

我在同一个页面上运行两个函数,一个自动提交一个下拉表单来更新变量,另一个用于打印页面的一部分。它们都按预期工作,除非在我使用打印功能后,它会中断表单提交功能的工作,除非我重新加载页面。不确定为什么或如何解决此问题

    <script>
        $(function() {
            $('#daterange').change(function() {
                this.form.submit();
            });
        });
    </script>
    <script>
        function printDiv(printArea) {
            var printContents = document.getElementById(printArea).innerHTML;
            var originalContents = document.body.innerHTML;

            document.body.innerHTML = printContents;

            window.print();

            document.body.innerHTML = originalContents;
        }
    </script>

$(函数(){
$('#daterange').change(函数(){
这个.form.submit();
});
});
函数printDiv(打印区域){
var printContents=document.getElementById(printArea).innerHTML;
var originalContents=document.body.innerHTML;
document.body.innerHTML=打印内容;
window.print();
document.body.innerHTML=原始内容;
}

问题在于,当您在printDiv函数中重写文档时,jQuery会释放绑定在此处的onchange事件的上下文:

$(function() {
    $('#daterange').change(function() {
        this.form.submit();
    });
});
解决此问题的一个可能的解决方法是使用以下内容在动态创建的元素上绑定onChange事件:

$(document).change('#daterange', function(e) {
    e.preventDefault();
    //this.form.submit(); // 'this' is now referring to document thus this.form is undefined.
    this.forms[0].submit(); // refer to your form here. this is just an example for reference
    //alert('submit called');
});
注意
$(document).change('#daterange',function(e){
部分,这里我们告诉jquery将事件与文档绑定,然后在更新值时查找
#daterange
元素。 change中的第一个参数告诉jQuery在事件触发器之后查找元素,并处理动态创建的元素


这里有一支笔供您参考

供参考:查找“委派事件处理程序”部分如果这能解决您的问题,请随意投票并接受:)我尝试了此功能,但帖子现在在使用建议功能时根本没有提交您需要更新
此.form.submit();
引用您的表单。
的值已更改