我有一个按钮,当按下该按钮时会打开一个新窗口,在该窗口中用户选择一个文件并单击它。单击时,该值应传递给窗体中的隐藏输入并关闭窗口。一切都像它应该的那样,唯一不起作用的是输入值保持空白的事实。
这是我的意见:
<input name="value_pdf" value="" type="hidden" id="value_pdf" />
这是功能:
$(".insert").click(
function () {
var file = $(this).attr("rel"); //its correct and passes the value I want
var value = "value_<?php echo $_GET['but'];?>" //again, this is correct too, I've used console.log() to check
opener.$("#value_pdf").val(file);
//I've done a console.log() here to to check if #value_pdf had a value and it was correct, it logged something like "database.pdf"
window.close();
return false;
}
);
我的问题是,我在哪里做错了?我觉得一切都是对的......
修改 事实证明,在我的代码中的某个地方,我在DIV上有相同的ID。如果你遇到同样的问题,我建议你检查选择的答案,这会使我的代码变得更好。
答案 0 :(得分:1)
我从未尝试opener.$(...)
,但它看起来应该有效,只要开启窗口仍然存在且没有跨域问题。
如果它不起作用,那么你可以尝试在开启器中编写一个函数并从子窗口调用它。
在opener中(在全局命名空间或某些可从全局访问的命名空间中):
function setValue(selector, value) {
$(selector).val(value);
}
在子窗口中:
window.opener.setValue("#value_pdf", file);
我无法理解为什么在opener.$(...)
没有这种情况时这会起作用,因为没有根本的区别。但是,嘿,你永远不会知道...
答案 1 :(得分:0)
如果您启用了php,我会使用它而不是通过javascript发送。如果您需要同一页面上的信息,我会使用AJAX。
http://api.jquery.com/jquery.post/
样本看起来像这样。
$.post( "test.php", $( "#testform" ).serialize() );
<form id="testform">
<input name="something">
</form>
这将采用一个表单并提交名为“something”的输入并将其发布到“test.php”页面。