Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当通过AJAX加载时,JQuery脚本不会运行_Jquery_Ajax_Dom - Fatal编程技术网

当通过AJAX加载时,JQuery脚本不会运行

当通过AJAX加载时,JQuery脚本不会运行,jquery,ajax,dom,Jquery,Ajax,Dom,我花了一些时间阅读jquery文档和其他问题。我一辈子都不知道自己做错了什么。我有它的工作时,简单地把一个页面放在一起,并加载页面。但是当我通过Ajax加载代码时,它就不起作用了。我通读了其他一些有类似问题的人的文章,每个人都说要使用.live,但这对我也不起作用。我做错了什么 我正在尝试修改表单enctype,以便在选中复选框时不会上载文件 以下是通过ajax加载的表单: <form id="RequestForm" enctype="multipart/form-data" metho

我花了一些时间阅读jquery文档和其他问题。我一辈子都不知道自己做错了什么。我有它的工作时,简单地把一个页面放在一起,并加载页面。但是当我通过Ajax加载代码时,它就不起作用了。我通读了其他一些有类似问题的人的文章,每个人都说要使用
.live
,但这对我也不起作用。我做错了什么

我正在尝试修改表单enctype,以便在选中复选框时不会上载文件

以下是通过ajax加载的表单:

<form id="RequestForm" enctype="multipart/form-data" method="post" action="/submit">
Input File: <input name="inputFile" value="" id="inputFile" type="file">
<input name="onDrive" id="change_form" value="1" type="checkbox"> Located on drive
</form>

输入文件:
位于车道上
我也有这个代码。它应该放在原始页面上,还是可以放在通过ajax加载的内容中?我必须做些什么才能使它与加载的内容一起工作,这样当选中“更改表单”复选框时,它将更新

<script> 
$(document).ready(function(){
    $('#change_form').click(function() {
    if($('#change_form').is(":checked")){
        // update the apply button to enabled
        $('form#RequestForm').removeAttr('enctype');
    } else {
        $('form#RequestForm').attr('enctype', 'multipart/form-data');   
    }
    }); 
}); 
</script>

$(文档).ready(函数(){
$(“#更改表格”)。单击(函数(){
如果($('change_form')是(“:checked”)){
//将“应用”按钮更新为“已启用”
$('form#RequestForm')。removeAttr('enctype');
}否则{
$('form#RequestForm').attr('enctype','multipart/form data');
}
}); 
}); 
更新:为了清楚起见,加载了一个HTML页面。然后,根据用户的选择,通过AJAX加载上面列出的表单。我还将表单和脚本添加到AJAX加载的内容中,以便在调用AJAX事件加载内容后将其添加到HTML页面


如果document.ready上正在运行设置单击事件处理程序的代码,但表单实际上不存在,则可能是您的问题,下面是一个小说明,其中包含更多代码


将脚本与ajax响应中的表单一起发送过来,并将脚本放在底部。

我绝不是JQuery专家,但我认为有一种方法可以实现这一点,并将脚本保存在ajax结果中,您需要:

  • 删除.ready()部分,只需在表单html结束后按原样将脚本代码放入其中即可

  • 确保JQuery ajax调用是在
    数据类型设置为
    html
    的情况下完成的,例如:

    $.ajax({
    数据类型:“html”``
    
    
    
    })`

  • 这将告诉JQuery执行ajax响应中的所有标记


    或者(可能更安全)将脚本代码从ajax表单html中移出,并使用
    $('#change_form').live(“click”,function(){handle_code})。这将告诉JQuery监视DOM中的任何更改,因此一旦表单添加到DOM中,它将关闭click事件

    这个解决方案不是我所期望的。我有点失望,无法通过jQuery解决这个问题。我最终直接编写了javascript

    function changeForm(chkbox) {
        if (chkbox.checked == 1) {
            document.getElementById("RequestForm").removeAttribute("enctype","");
        } else {
            document.getElementById("RequestForm").setAttribute("enctype","multipart/form-data");
        }   
    }
    
    然后在复选框上添加一个
    onClick=“changeForm(this);”
    。现在,即使它是通过Ajax加载的,对该函数的调用仍然有效。它改变了形式,一切都很好


    jQuery坏了吗?还是我遗漏了什么?

    您的问题是文档准备就绪已启动

    修改包含的脚本,如下所示:

    function addmystuff()
    {
    $('#change_form').click(function() {
        if($('#change_form').is(":checked")){
            // update the apply button to enabled
            $('#RequestForm').removeAttr('enctype');
        } else {
            $('#RequestForm').attr('enctype', 'multipart/form-data');   
        }
        }); 
    };
    addmystuff();
    
    这将添加事件处理程序作为新内容的一部分

    假设:jQuery被正确地添加到页面中。 测试jQuery是否添加了:(在主页面中,而不是ajax加载的部分)


    我不确定,但我也有类似的问题。 我有一个应用于菜单的脚本,然后加载包含新菜单的链接内容。 如果我继续单击第一个菜单,它将继续工作,但新菜单的菜单上似乎没有应用相同的脚本

    我认为这是因为DOM发生了变化,而jQuery仍在使用旧的DOM。
    因此,在加载新内容后,重新加载脚本。我还没有解决自己的问题,因为我想重新加载脚本,但不想推翻某些变量。

    有一件事,就是使用#RequestForm not form#RequestForm,不确定这是否会导致问题。你为什么说使用“.live()”设置事件处理程序不起作用?当然应该这样做。它可能会起作用。但是我不能让它工作。这就是我在这里寻求建议的原因。我已经将
    alert('clicked')
    放在click事件中,这样我就可以看到它正在工作,而不是“alert”。您正在执行
    $('change_form')。live(“click”,function(){…})用于实时绑定?是的。我试过了,但还是不起作用。是否需要删除
    $(document).ready(function()){
    ?我也试过了。我把表单和脚本放在AJAX内容上,这样在加载时就可以放在一起了。它不起作用。我还需要做些什么吗?我会在pastebin上发布一些东西并更新问题。我也试过了。这听起来可能更深入。我没有测试,你可能需要添加一些内容新div容器之后的脚本,以便正确处理它。请确保也将类型放入标记中(不在链接示例中)
    function addmystuff()
    {
    $('#change_form').click(function() {
        if($('#change_form').is(":checked")){
            // update the apply button to enabled
            $('#RequestForm').removeAttr('enctype');
        } else {
            $('#RequestForm').attr('enctype', 'multipart/form-data');   
        }
        }); 
    };
    addmystuff();
    
    $(document).ready(function(){
      alert("jquery got loaded");
    });