$.fn.submit() event don't trigger inside an <iframe&g
$.fn.submit() event don't trigger inside an <iframe>
简单地说,我有一个表单和一个字段。
<!-- inner.html -->
<form id="inner_form">
<input type="text" name="username" />
<input type="submit" />
</form>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script>
$(function() {
$('#inner_form').submit(function() {
alert('Inner submit is triggered!');
});
});
</script>
上面的代码很好:当我点击提交按钮时,它会触发#inner_form
的提交事件,并提醒句子:Inner submit is triggered!
我的问题是,当我制作另一个页面,并在<iframe>
中加载inner.html
时:
<!-- outer.html -->
<iframe id="the_frame" src="inner.html">
</iframe>
<button id="outer_submit">Submit Inner</button>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script>
$(function() {
$('#outer_submit').click(function() {
// it don't trigger the inner submit() event!
$('#the_frame').contents().find('#inner_form').submit();
});
});
</script>
作为上面的代码(在snnipet中可能不太好用),我单击#outer_submit
按钮,#inner_form
确实提交了,但我在其中定义的事件没有触发!
为什么会发生这种情况?如果我想用外部动作很好地触发内部事件,我该怎么做呢?
虽然我不能回答"为什么",但以下是我在测试时的一些发现:
用代替.submit()
动作
$('#the_frame').contents().find('#inner_form input[type="submit"]').click();
将触发警报。不过,这并不是一个合适的解决方案,因为有更多的方法可以提交表格。不过,这表明事件并没有完全崩溃。所以我挖得更深。
我尝试在inner.html:中使用本机javascript事件,而不是jquery的.submit([function])
绑定
<form id="inner_form" onsubmit="alert('hi')">
这实际上显示了警报。这也是:
$('#inner_form')[0].onsubmit = function() {
alert('Inner submit is triggered!');
}
因此,jQuery设置和/或检测自己的submit()
方法的方式似乎有问题。
再试一次:
$('#inner_form').on('submit', function() {
alert('Inner submit is triggered!');
});
此还显示提交!
我的猜测是,由于某种原因,当inner.html
中的事件被绑定时,它还不知道形式,即使绑定被包裹在一个隐含的document.ready事件中通过$(function(){ .. });
。
至于这是如何以及为什么,我仍然不知道,但解决方法很简单:用.on()
方法包装您的事件绑定。
相关文章:
- 为什么要从focus()更改为trigger('focus')
- $(window).height() inside iframe?
- php inside javascript
- Trigger.io Collaboration
- How to target an h1 inside an <a>?
- javascript inside laravel 5
- calling.trigger(“click”),它在ajax调用返回的javascript代码中
- 在javascript createElement上调用.trigger
- 在 iPad 上调试 trigger.io 应用
- 在此代码中需要 .trigger(“更改”)是什么?
- RefluxJS存储可以在调用trigger()时指示哪个属性已更改吗?
- jQuery $(this) inside function
- jquery .change inside loop
- jQuery .trigger() 多个事件
- trigger('create') 在 Chrome 中正确呈现,但在 Android 模拟器中无法正确呈现
- 将 jQuery trigger() 与 hoverIntent 一起使用
- 在隐藏值上调用 jQuery .trigger('change') 会破坏与 KNOCKOUT 相关的可观察性
- 未捕获的类型错误:document.getElementById(..).value.trigger不是函数
- for loop inside another for loop javascript (jquery)
- $.fn.submit() event don't trigger inside an <iframe&g