【问题标题】:jQuery click event not redirecting to hrefjQuery单击事件未重定向到href
【发布时间】:2010-12-02 03:49:41
【问题描述】:

我有一个带有嵌入式 Flash 电影的 HTML 页面,它有一个按钮。 Flash 中的这个按钮调用 lnkEmail 的点击事件。它应该停止实际导航到新页面,但是 event.preventDefault();并且从事件处理程序返回 false 似乎对我不起作用。谁能提供见解?

以下示例在 Chrome 中运行,但在 IE 7 和 FF 中失败。在那些浏览器中,它重定向到以 Object [object] 作为正文的空白页面,而在 FF 中,将 url 设置为我在 Flash 电影中执行的 javascript 代码。 (即:“javascript:jQuery('#lnkEmail').click();”)

以下是 Flash ActionScript 中的代码。

cmdDemo.addEventListener(MouseEvent.CLICK, clickHandler);
function clickHandler(event:MouseEvent):void {
   navigateToURL(
      new URLRequest(
         "javascript:jQuery('#lnkEmail').click();"
      ), 
      "_self"
   );
}

在包含的 HTML 页面中有以下脚本和元素:

<script type="text/javascript">
   $(function(){
      $.nyroModalSettings({
         debug: true
      });

      $('#lnkEmail').click(function(event) {
         event.preventDefault();
         $.nyroModalManual({
            url: 'demoRequest.aspx?Type=4'
         });
         return false;
      });
   });
</script>

稍后在同一个文件中:

<div id="box_stage_home">
   <script type="text/javascript">
      $(document).ready(function() { 
         $('#HomeAnimation').flash({ 
            swf: 'Flash/index_page.swf', 
            height: 288, 
            width: 686, 
            wmode: 'transparent' 
         }); 
      });
   </script>
   <div id="HomeAnimation"><!--IE 6.0--></div>
   <a href="emailSend.aspx?Type=4" id="lnkEmail">&nbsp;</a>
</div>

【问题讨论】:

  • 忘了提到这在 Chrome 中有效。但在 IE 7 和 FF 中,它重定向到一个带有 Object [object] 和一个 url 作为 javascript:jQuery('#lnkEmail').click();. 的页面
  • 欢迎来到 Stack Overflow!您可以通过单击问题右下角的edit 链接来编辑您的原始帖子 - 无需对此类内容发表评论。

标签: javascript jquery flash nyromodal preventdefault


【解决方案1】:

查看navigateToURL 文档:http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/net/package.html#navigateToURL%28%29。它不打算与javascript: 链接一起使用。

要做你想做的事,请使用ExternalInterface.call()。

【讨论】:

  • 添加 void(0);在调用 navigateToURL() 最终成为解决方案之后。无效(0);告诉浏览器不要专门打开新页面。在某处的 Flash 文档页面上找到了这个,暂时不记得了。哦,是的,必须将 allowScriptAccess="always" 添加到 flash 变量中。我现在也看到了如何使用 ExternalInterface 来做到这一点,这确实看起来是正确的方法。
  • 之前说错了... 添加void(0);在 javascript 内部的 lnkEmail 元素上调用 click() 后,最终成为解决方案。
  • "javascript:jQuery('#lnkEmail').click(); void(0);"
【解决方案2】:

想出了正确的方法(感谢corneliu),所以我想我会把它发回到这里以供参考。在html文件中:

<script type="text/javascript">
   function viewDemo() {
      $.nyroModalManual({
         url: 'emailSend.aspx?Type=4'
      });           
   }
</script>

在闪存文件中:

import flash.system.Security;

cmdDemo.addEventListener(MouseEvent.CLICK, clickHandler);

function clickHandler(event:MouseEvent):void {
   flash.system.Security.allowDomain("business.com");
   ExternalInterface.call("viewDemo");
}

【讨论】:

  • 太棒了,嘿,Rob,您应该能够接受自己的答案。这将有助于任何可能通过搜索找到此内容的人。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-28
相关资源
最近更新 更多