问题描述
- Js代码顺序问题,JS异常:报缺少对象
-
大家好,有一个JS问题,代码以上线,突然有一天下午,JS异常:报缺少对象代码如下:
1,有一个父页面JSP里有Iframe,Iframe里调用另一个公司界面,这个界面有一个提交按钮,点击提交后回调我一个Action的方法
2,这个方法回调中间界面如下:<%@ page language="java" import="java.util.*" pageEncoding="gbk"%> <%@include file="/common/taglibs.jsp"%> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=GBK"> <title>沃易销系统欢迎您</title> <base target="_self"> <script src="http://112.65.239.123/o2o/jituan/js/jquery-1.7.2.min.js"></script> </head> <body screen_capture_injected="true"> <input type="text" id="name" value="${zhiGongUser.cert_name }" /> <br> <input type="text" id="card" value="${zhiGongUser.cert_id }" /> <br> <input type="text" id="cardaddr" value="${zhiGongUser.cert_addr }" /> <br> <input type="text" id="certexpdate" value="${zhiGongUser.cert_exp_date }" /> <br> <input type="text" id="authCode" value="${zhiGongUser.authCode }" /> <br> <script type="text/javascript"> $(function() { alert(parent); parent.tianchong('${zhiGongUser.cert_name }', '${zhiGongUser.cert_id }', '${zhiGongUser.cert_addr }','${zhiGongUser.cert_exp_date }','${zhiGongUser.authCode }'); }); </script> </body> </html>
parent.tianchong 这里报缺少对象
解决方案
父页包含这个方法的脚本你放到页脚了吧。。速度问题导致iframe的dom下载完毕,而父页的js文件还没下载导致找不到函数。。
你将那个js脚本放到父页的head标签里面加载或者放到ifarme之前,不能放之后
解决方案二:
确认几点
1、两个页面的域是否在同一个,如果是跨域,这么是访问不到的
2、如果是同一个域,是否对方页面中有这个方法。
解决方案三:
修改完代码后又可以了,但是不知道原因:
<%@ page language="java" import="java.util.*" pageEncoding="gbk"%>
<%@include file="/common/taglibs.jsp"%>
<!DOCTYPE html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK">
<title>沃易销系统欢迎您</title>
<base target="_self">
<script src="http://112.65.239.123/o2o/jituan/js/jquery-1.7.2.min.js"></script>
</head>
<body screen_capture_injected="true" onload="userInfo()">
<input type="text" id="name" value="${zhiGongUser.cert_name }" />
<br>
<input type="text" id="card" value="${zhiGongUser.cert_id }" />
<br>
<input type="text" id="cardaddr" value="${zhiGongUser.cert_addr }" />
<br>
<input type="text" id="certexpdate" value="${zhiGongUser.cert_exp_date }" />
<br>
<input type="text" id="authCode" value="${zhiGongUser.authCode }" />
<br>
function userInfo(){
parent.tianchong('${zhiGongUser.cert_name }', '${zhiGongUser.cert_id }', '${zhiGongUser.cert_addr }','${zhiGongUser.cert_exp_date }','${zhiGongUser.authCode }');
);
</body>
解决方案四:
$(function() {} 改成了onload()方法,
解决方案五:
应该是同一个域,能访问,下面回调的是父类的tianchong方法
解决方案六:
回调方法是放在父页的head里面,如下:
function tianchong(name,card,cardaddr,certexpdate){
$("#userName").val(name);
$("#cardId").val(card);
$("#certAdree").val(cardaddr);
$("#cardtime2").val(certexpdate);
$("#jingBanName").val(name);
$("#contacts").val(name);
$("#contactsname2").val(name);
$("#networkaddr2").val(cardaddr);
$("#contactsAddress").val(cardaddr);
$("#contactsname3").val(name);
$("#networkaddr3").val(cardaddr);
chooseAlertClose();
var oper_code = $('.current').data("val");
if(oper_code=='1'){
$("#kehuInfo1").show();
$("#kehuInfo2").hide();
$("#kehuInfo3").hide();
}else if(oper_code=='2'){
$("#kehuInfo2").show();
$("#kehuInfo3").hide();
$("#kehuInfo1").hide();
}else {
$("#kehuInfo3").show();
$("#kehuInfo2").hide();
$("#kehuInfo1").hide();
}
}
解决方案七:
我的Iframe是通过
chooseAlertFn('信息提示','', newBtnObj2);
这个chooseAlertFn函数是引用
解决方案八:
解决方案九:
$(function() {
alert(parent);
parent.tianchong('${zhiGongUser.cert_name }', '${zhiGongUser.cert_id }', '${zhiGongUser.cert_addr }','${zhiGongUser.cert_exp_date }','${zhiGongUser.authCode }');
}); 这样写只在加载页面的时候执行以下,你点击什么的时候是不会再执行的
解决方案十:
js对象问题