4

我正在尝试将值从子窗口传递并插入到位于父窗口中的文本字段的value 属性,而不是其属性。我已经尝试了以下所有方法,但到目前为止没有运气:

子窗口:

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 保存它时,该值实际上是空的。任何的想法?

4

3 回答 3

6
window.opener.document.getElementById(logo).value = fileName;

这应该可以工作——除了logo应该是一个字符串。否则打开的子窗口将尝试查找名称为 的变量logo,它可能找不到。

所以,这样做:

window.opener.document.getElementById('logo').value = fileName;

不知道你做错了什么,也许 PHP 回显不会输出正确的 ID?无论如何,它对我来说很好。看这个例子:

父.html

<input type="text" id="logo1" value="VALUE-SHOULD-BE-INSERTED-HERE" />
<script>window.open('child.html');</script>

child.html

<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>
于 2013-10-14T20:43:43.987 回答
2

现在更好的方法是 Window.postMessage(),有关详细信息,请参阅https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage

于 2015-06-05T17:58:37.857 回答
0

我不确定是什么导致了这个问题,但也许你可以尝试通过孩子调用的父函数中的函数进行更新。

所以在父级中添加函数(我假设你可以使用 jQuery,因为你在问题中提到了它)

function UpdateValue(newVal){
     $("#logo").val(newVal); 
}

并在孩子身上调用它

window.opener.UpdateValue(fileName);

虽然我想知道为什么原版不起作用。这可能是一个很好的解决方法。

于 2013-10-14T20:40:59.543 回答