手动触发的Javascript事件不针对iFrame上下文中的元素传播
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了手动触发的Javascript事件不针对iFrame上下文中的元素传播,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1618字,纯文字阅读大概需要3分钟。
内容图文
我实际上是在从事一种所见即所得的设计器,该设计器允许最终用户通过[input type =“ color”]字段选择颜色.该界面的输入在左侧,在右侧是指向生成的预览的iframe.通常,当单击输入并更改颜色时,它将调用函数更新(通过输入字段上的change事件由主干视图绑定).然后,此更新功能会更改iFrame中的CSS值以进行实时预览.一切正常.
但是,我正在构建一个单元测试页面,该页面实际上是在测试将输入字段更改为某种颜色确实会更改预览中的颜色.本质上是这样的:“将输入更改为PINK.预览中该输入的相应CSS选择器是否更改为PINK?”
单元测试页的结构是通过iFrame加载设计器.现在我们有了:
>第0层:单元测试报告
>第1层:变色输入
>第2层:实时预览
所以这是问题所在:
运行单元测试时,它会成功更改输入字段的值,但是视图似乎不会捕获后续的更改事件,因此实时预览不会更新.
这是代码:
for (i in testable) {
item = testable[i];
item.element.val(tempColor);
item.element.trigger('change');
}
如果我将其退出测试模块的范围并使用浏览器的控制台,则此代码具有相同的效果(输入更新,但从未调用过触发器):
$("#testFrame").contents().find('input#cat_RowColoralternate').val('#AAEFCC').trigger('change')
为了证明该事件存在并且确实有效,如果我直接在没有测试层的情况下加载该事件(例如,直接加载应用程序),则此代码将完全按预期运行.
$(document).find('input#cat_RowColoralternate').val('#AAEFCC').trigger('change');
唯一的区别是附加的iFrame层,因此我的理论是该事件不会从第0层传播到第1层.
解决方法:
我不相信您可以通过这种方式跨框架触发jQuery事件.对.trigger()的调用发生在父框架中,因此在iframe中的jQuery对象中无法正常工作/根本无法正常工作.
相反,您需要掌握iframe中的jQuery对象,并在那里执行触发器:
var framejQuery = $('#testFrame').get(0).contentWindow.$;
framejQuery('input#cat_RowColoralternate').val('#AAEFCC').trigger('change');
内容总结
以上是互联网集市为您收集整理的手动触发的Javascript事件不针对iFrame上下文中的元素传播全部内容,希望文章能够帮你解决手动触发的Javascript事件不针对iFrame上下文中的元素传播所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。