Javascript 从Fancybox弹出窗口内调用警报功能-iFrame和同源策略

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"

我有一把小提琴:

在show start和show over and close时会触发警报,但无法绑定到按钮单击

我有一个fancybox弹出窗口,可以正常工作。这是一种形式:

HTML是一个简单的表:

<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!!!");
        });
    }