Javascript 从Fancybox弹出窗口内调用警报功能-iFrame和同源策略
我有一把小提琴: 在show start和show over and close时会触发警报,但无法绑定到按钮单击 我有一个fancybox弹出窗口,可以正常工作。这是一种形式: HTML是一个简单的表:Javascript 从Fancybox弹出窗口内调用警报功能-iFrame和同源策略,javascript,fancybox,alert,same-origin-policy,Javascript,Fancybox,Alert,Same Origin Policy,我有一把小提琴: 在show start和show over and close时会触发警报,但无法绑定到按钮单击 我有一个fancybox弹出窗口,可以正常工作。这是一种形式: HTML是一个简单的表: <form id="my-form" method="post" action=""> <table> <tr> <td> <label for="name"
<form id="my-form" method="post" action="">
<table>
<tr>
<td>
<label for="name">Name</label></td>
<input type="text" id="name" name="name">
</td>
<td>
<input type="submit" value="Submit">
</td>
</tr>
</table>
</form>
我意识到我不能在iFrame内这样做,因为相同的原产地政策。我一辈子都想不出如何让它发挥作用
注意
请注意,这个问题从一开始就发生了变化,因此下面提到验证的答案不适用。经过一番努力,我决定在不使用iFrame的情况下重新编写这个问题。我认为iFrame是最好的方法,但后来意识到我错了,至少在我目前的理解水平上是这样。但是,使用此方法,我可以从fancyBox弹出窗口成功调用警报: 我想我也可以在这里使用我现有的验证 以下是更改的HTML:
<a href="#test" class="fancy-popup">fancy link</a>
现在,iFrame fancyBox中会弹出警报框
这个解决方案的问题是:它可能局限于我所在的同一个域,所以在生产中可能无法工作。我运行了一个快速测试,它似乎可以跨域工作,但我感觉它将来会给我带来麻烦…您可以使用
XHR
将警报添加到表单中,您也可以使用AJAX,甚至可以在fancybox中使用iframe(不推荐,但您可以)。您是否尝试过使用jquery中的一些表单验证程序插件绑定代码?我还没有尝试过这些方法,因为我希望它能以这种方式工作。但现在看来工作起来比我原来想象的要难,我可能会寻求其他方法。我很可能会转到jQuery表单验证程序插件。谢谢
$(document).ready(function() {
function before_show() {
alert("fancybox before show");
}
function after_show() {
alert("fancybox after show");
}
function on_close() {
alert("fancybox after close");
}
function alert_me() {
$.fancybox.inner.find('iframe').contents().find('input.click-me').click(function() {
alert("fancybox has been foiled!!!");
});
}
$(".fancy-popup").fancybox({
openSpeed : 'slow',
openEffect : 'fade',
minWidth : '200',
minHeight : '100',
maxWidth : '400',
maxHeight : '150',
scrolling : 'no',
beforeShow : before_show,
afterShow : after_show,
afterClose : on_close,
//afterShow : alert_me
});
});
<a href="#test" class="fancy-popup">fancy link</a>
function alert_me() {
$.fancybox.inner.find('iframe').contents().find(
'input.click-me').click(function() {
alert("fancybox has been foiled!!!");
});
}