js回调函数、父画面与子画面之间的js回调函数(含参数传递)

本文探讨了JavaScript中回调函数的应用,特别是在父画面A.jsp与子画面B.jsp之间的交互,详细阐述了执行顺序:首先在父画面调用function①,接着在子画面执行function②,最后返回父画面执行function④,期间涉及参数传递。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 js回调函数、父画面与子画面之间的js回调函数(含参数传递)

(执行顺序:①→②→③→④)

function①→A.jsp(父画面)上的方法

	// 子画面の呼出
	function openSubWindow(clubNo, fileId) {
		//サイズ決定
		var windowSize = 'dialogWidth:' + '520' + 'px;dialogHeight:' + '330'+ 'px'
				+ 'center:yes;help:no;resizable:no;scroll:no;status:no;unadorned:no;dialogHide:no';
		//遷移先
		var val = new Array();
		val["action"] = "/Zfn110fjUploadInit";
		var actionUrl = ACTION_PATH_BASE + val["action"];
		actionUrl = actionUrl.replace(/;jsessionid=.*$/, "")
		            + ".do?callBackFunction=setFileName&state=other&clubNo=" + clubNo + "&fileId=" + fileId;
		//ウィンドウ表示
		window.showModalDialog(actionUrl, window, windowSize);
	}
①setFileName即为子画面(B)执行后,父画面(A)要执行的方法,即:callBackFunction的方法
②蓝色字部分:该子画面是以window.showModalDialog的形式打开的故子画面callBackFunction时应以window.dialogArgum

function②→B.jsp(子画面)上的方法

    // 画像ファイルをアップロード
	function fileSelect() {
		var fileId = document.getElementById("fileId").value;
		var objName = "file" + fileId;
		var fileObj = document.getElementById(objName);
		var filePath = fileObj.value;
		document.getElementById("filePath").value = filePath;
		var url = location.search;
		document.getElementById("initFlg").value = "1";
		if (filePath == null || filePath == "") {
			alert("画像ファイルを指定してください。");
			return;
		} else {
			var fileType = filePath.split(".")[1];
			if (fileType == "jpg" || fileType == "jpeg") {
				document.getElementById("url").value = url;
				doSubmit('/Zfn110fjFileUpload', null);
			} else {
				alert("拡張子が、jpg 又はjpeg 以外の画像は指定できません。");
				return;
			}
			callBack();
		}
	}
function③→B.jsp(子画面)上的方法

	function callBack() {
		var fileId = document.getElementById("fileId").value;
		var clubNo = document.getElementById("clubNo").value;
		var filePath = document.getElementById("filePath").value
		var fileName = filePath.substr(filePath.lastIndexOf('\\') + 1);
        var upLoadFlg=document.getElementById("upLoadFlg").value;
        var url=document.getElementById("url").value;
    	if (url.indexOf("?") != -1) {
			var str = url.substr(1);
			urlSplit = str.split("&");
			urlCallBack = urlSplit[0].split("=");
		}
		var callBackFunction = urlCallBack[1];
		var fileSavePathTmp = "<%=jp.co.central.zeus.common.CentralConstant.NAVI_UPLOAD_PATH_IMG%>";
		var fileSavePath = fileSavePathTmp.replace("XXX", clubNo) + "/"
				+ fileName;
		strRun = "window.dialogArguments." + callBackFunction + "('" + fileName
				+ "','" + fileId + "','" + fileSavePath + "','" + upLoadFlg
				+ "');";
		if (window.dialogArguments) {
			eval(strRun);
		}
	}
③B画面执行后,调用A画面上的方法,即:执行callBackFunction。
④蓝色字部分:window.dialogArguments形式返回

function④→A.jsp(父画面)上的方法

    // callBackFunctionの呼出
	function setFileName(fileName, fileId, fileSavePath,upLoadFlg) {
		//alert("1 upLoadFlg=" + upLoadFlg);
		if (upLoadFlg == "") {
			var fileNameStr = "gazou" + fileId;
			document.getElementById(fileNameStr).value = fileName;
			var fileSavePathStr = "gazouPath" + fileId;
			document.getElementById(fileSavePathStr).value = fileSavePath;
		}
    	if (upLoadFlg == "1") {
    		var file1Id = "'" + fileId + "'";
    		var tableId = "tableMess" + fileId;
    		var table = document.getElementById(tableId);
    		var fileNameStr = "gazou" + fileId;
    		var fileName = document.getElementById(fileNameStr).value;
    		if (fileId == "1" || fileId == "2") {
    			table.rows[3].cells[1].innerHTML = '<hj:link href="javascript:void(0);" styleId="gazou1" onclick="photoSearch('
    					+ file1Id+ ');" >' + fileName + '</hj:link>'
    					+ '<html:button property="" styleId="delete1" value="削除" onclick="deleteGazou('
    					+ file1Id + ');" ></html:button>';
    		} else {
    			table.rows[4].cells[1].innerHTML = '<hj:link href="javascript:void(0);" styleId="gazou1" onclick="photoSearch('
    					+ file1Id+ ');" >'+ fileName + '</hj:link>'
    					+ '<html:button property="" styleId="delete1" value="削除" onclick="deleteGazou('
    					+ file1Id + ');" ></html:button>';
    		}
    	} else if (upLoadFlg == "0") {
    		var fileNameStr = "gazou" + fileId;
			document.getElementById(fileNameStr).value = "";
			var fileSavePathStr = "gazouPath" + fileId;
			document.getElementById(fileSavePathStr).value = "";
    	}
	}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值