php - 当一个 html 加载到另一个 html 的 div 中时,document.ready jquery 不起作用

标签 php jquery ajax json html

我在另一个文档的 div 中加载一个带有关联 jquery 和 ajax 调用的 html 页面。但是,正在加载的html页面的$document.ready不起作用。

我使用以下语法在另一个 div 中加载 html 页面。

$('#LeaveReq').click(function(){
   $('#Showpages').load("leaveapp.html");
});

其中 Showpages 是一个空 div,定义为

<div id="Showpages" style = "float:left; width: 85%; background: white;">
<p> this is a placeholder
</div>

正在加载的页面如下

<script>

// standard functions for processing forms

function sendval(){
var thisform = document.getElementById("leaveapp");
var tosubmit = validateForm();

if(tosubmit){
   showprog();
   curruser = localStorage.getItem("username");
   curremail = localStorage.getItem("usermail")
   supmail = localStorage.getItem("supmail")

   // write json to submit the leaveform and update values in database
   var myData = [];
   myData.push({'EmpName' : curruser});
   for(var i=0; i<thisform.elements.length; i++)
   {
        myData.push({
        thisform.elements[i].name: thisform.elements[0].value
    });
   }
   myData.push({'UsrMail' : curremail});
   myData.push({'SupMail' : supmail});
   myData.push({'Status' : 'Submit'});

   var myjson = JSON.stringify(myData);

    $.ajax({
    method: "POST",
    url: "submitleave.php",
    data: {"points": myjson}
    })
    .done(function( msg ) {
        if(msg == "Success"){
            showcomp();
        else {
            alert("Could not sumbit - try again");
            window.open("index.html","_self");
        }
    });
} else
{
   alert("Please enter valid values before submitting the form");
}
}

function showprog(){
$('#forminput').hide();
$('#formsubmit').show();   
}

function showcomp(){
   $('#formsubmit').hide();
   $('#formsuccess').show();   
}

function onsuccess(retval){
   showcomp();
}

function validateForm(){
var $list = $("#leaveapp :input[type='text']");
var formstatus = true;
$list.each(function(){
    if($(this).val() == null | $(this).val() == ""){
        formstatus = false;
    }
})
return formstatus;
}

$('document').ready(function(){
   $('#formsubmit').hide();
   $('#formsuccess').hide();
   logged_user = localStorage.getItem("username");
});

</script>

<div id='forminput'>

<form id="leaveapp">

<label><?=logged_user?></label>
<p> Leave Type : <select name = "leavetype" id = "leavetype">
                 <option value="Annual Leave">Annual Leave</option>
                 <option value="Casual Leave">Casual Leave</option>
                 <option value="Sick Leave">Sick Leave</option>
                 <option value="Hajj Leave">Hajj Leave</option>
                 <option value="Unpaid Leave">Unpaid Leave</option>
                 </select> </p><br>
<p> Start Date : <input required readonly="true" type="text" name="StartDate" id="txtFromDate" /> </p><br>
<p> End Date :   <input required readonly="true" type="text" name="EndDate" id="txtToDate" /> </p><br>
<p> Contact Number : <input required pattern="[0-9()]{5,15}" type="text" name="Contactnum" id="contactnum" /> </p><br>
<p><input type="text" id = "Comments" name="Comments" value="Comments" /></p> <br>
<input type="submit" id="submit" value="Submit" onclick=sendval()>

</form>
</div>

<script>
$("#txtFromDate").datepicker({
        minDate: "-5D",
        maxDate: "+120D",
        numberOfMonths: 2,
        onSelect: function(selected) {
            $("#txtToDate").datepicker("option","minDate", selected)
        }
    });

</script>

<script>

$("#txtToDate").datepicker({ 
        minDate: 0,
        maxDate:"+180D",
        numberOfMonths: 2,
        onSelect: function(selected) {
            $("#txtFromDate").datepicker("option","maxDate", selected)
        }
    });

</script>

<script>

$('#leaveapp').on("keyup keypress", function(e) {
  var code = e.keyCode || e.which; 
  if (code  == 13) {               
    e.preventDefault();
    return false;
  }
});

</script>

<div id ='formsubmit'>
   <label> "Submission in progress - do not close the window </label>
</div>

<div id = "formsuccess">
<label> Form submitted successfully. Thank you </label>
</div>

加载的 html 函数没有任何 jquery 功能 - 即日期选择器不起作用等。

请你告诉我我犯了什么错误。

我加载了一个类似的页面,但它可以工作,但日期选择器或任何验证并不复杂。

问候,

最佳答案

加载 html 文件后 $(document).ready 未触发的原因是 $().load 函数执行异步请求。您的页面在完成页面渲染之前不会等待响应。在leaveapp 文件完成加载之前,ready 事件可能已经触发。您可以采取两件事来解决此问题:

<强>1。移动准备好的代码,直到加载请求中出现成功回调

$('#LeaveReq').click(function(){
   $('#Showpages').load("leaveapp.html", function() {
        $("#txtToDate").datepicker({ 
            minDate: 0,
            maxDate:"+180D",
            numberOfMonths: 2,
            onSelect: function(selected) {
                $("#txtFromDate").datepicker("option","maxDate", selected)
            }
        });

        $('#leaveapp').on("keyup keypress", function(e) {
          var code = e.keyCode || e.which; 
          if (code  == 13) {               
            e.preventDefault();
            return false;
          }
        });
   });
});

<强>2。使您的加载请求同步

您可以使用 $.ajax() 并指定 {async: false} 来获取 html 文件,而不是使用 .load 。这比第一个解决方案更慢且更笨重。

关于php - 当一个 html 加载到另一个 html 的 div 中时,document.ready jquery 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30209240/

相关文章:

php - Laravel 5.3 - 如何跨多个数据库执行查询?

javascript - 调用 jquery $(html :string) from TypeScript

javascript - Arbor Js - 节点点击?

用于在表单中手动输入 url 的 javascript url split

c# - 404 未找到 Ajax jquery MVC

python - 在网络摄像头中捕捉人脸并实时显示到 flask 中

php - 我无法将数据添加到我的 mysql 数据库中的表中

php - 哪些字符使用 base64encode?

javascript - 带 JS 的 HTML 表单在 PHP 中无法正常工作

javascript - #!链接中的主题标签和感叹号作为文件夹?