使用相同指令的同一页面上的多个表单和元素指令中的一个表单

时间:2016-06-15 16:14:24

标签: javascript angularjs forms angularjs-directive javascript-events

背景:如果表单很脏,我试图创建一个"暂停导航"指示。我已经看过几个关于SO的问题/例子,而且我把一些有些功能的东西放在一起,但不是很正确。我试图在整个Web应用程序中将此指令用作多个表单的属性。

问题:我的网页包含两个<form>元素(&#34; form1&#34;&#34; form2&#34;)嵌套在{{{ 1}}元素。 Form2进一步嵌套在自定义元素指令中。

当任何一个表单变脏并且我尝试导航到另一个页面(UI路由器更改)时,我从我们的提示服务获得预期的自定义提示。但是,如果我尝试重新加载页面,那么当form2变脏时,我只会获得一个浏览器生成的提示。当form1变脏时没有提示。

有人可以指导我在form1变脏时如何生成浏览器提示并且有重载等窗口事件吗?

相关HTML

<tab>

相关JAVASCRIPT

<!-- "main" view -->
<tabset>
    <tab heading="Heading1">
        <form name="FORM1" class="form-horizontal" form-dirty>
            <!-- FORM STUFF -->
        </form>
    </tab>  
    <tab heading="Heading2">
        <this-contains-form2 data="objOnScope"></this-contains-form2>
    </tab>
</tabset>

<!-- "thisContainsForm2" template -->
<form name="FORM2" class="form-horizontal" form-dirty>
    <!-- FORM STUFF -->
</form>

1 个答案:

答案 0 :(得分:0)

如果您使用ui bootstraps选项卡实现,您必须知道所有选项卡始终呈现,但所有非活动选项卡都设置为'display:none'

在这种情况下,两个form-dirty指令同时处于活动状态,这是一个问题,因为第二个选项卡会覆盖第一个选项卡window.onbeforeunload函数

使用jQuerys事件机制,以便能够注册多个这样的侦听器或编写自己的解决方案

如果您只是在同一页面上将两个表单放在彼此之下,则问题可能也存在 - &gt;只有第二个将在卸载前正确处理