我正在尝试传递并将子窗口中的值插入位于父窗口中的文本字段的值属性,而不是其属性。我已经尝试了以下所有但是到目前为止没有运气:
子窗口:
function getFile(oImg){
var id = <?php echo $id; ?>;
var editPage = window.opener.document;
oSrc = oImg.src;
lastSlash = oSrc.lastIndexOf('/');
oName = oSrc.substr(lastSlash+1);
var logo = 'logo'+id, logoHolder = 'logoHolder'+id;
//window.opener.document.getElementById(logo).value = oName;
//window.opener.document.getElementById(logo).setAttribute("value", oName);
//window.opener.document.getElementById(logo).innerHTML = oName;
//window.opener.document.getElementById(logo).setValue = oName;
window.opener.document.getElementById(logoHolder).src = "templates/img/user/" + oName;
this.close()
}
父页面:
<input type="text" id="logo1" name="logo1" value="VALUE-SHOULD-BE-INSERTED-HERE" />
第一个只显示文本字段中的值,但是当我尝试使用jquery保存它时,该值实际上是空的。有什么想法吗?
答案 0 :(得分:5)
window.opener.document.getElementById(logo).value = fileName;
这应该有效 - 除了logo
应该是一个字符串。否则,打开的子窗口将尝试查找名称为logo
的变量,它可能找不到。
所以,这样做:
window.opener.document.getElementById('logo').value = fileName;
不知道你做错了什么,也许PHP echo不会输出正确的ID?无论如何,它对我来说很好。见这个例子:
<input type="text" id="logo1" value="VALUE-SHOULD-BE-INSERTED-HERE" />
<script>window.open('child.html');</script>
<button id="btn">Click me</button>
<script>
btn.addEventListener('click', function () {
var logo = 'logo' + '1';
window.opener.document.getElementById(logo).value = 'something';
window.close();
});
</script>
答案 1 :(得分:2)
更好的方法是使用Window.postMessage(),有关详细信息,请参阅https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage。
答案 2 :(得分:0)
我不确定是什么导致了这个问题,但也许你可以尝试通过孩子调用的父级中的函数进行更新。
所以在父级中添加函数(我假设你可以使用jQuery,因为你在问题中提到过它)
function UpdateValue(newVal){
$("#logo").val(newVal);
}
并在孩子中称呼它
window.opener.UpdateValue(fileName);
虽然我想知道为什么原版不起作用。这可能是一个很好的解决方法。