`

JQuery巧用JavaScript模拟用户单击超链

阅读更多

  公司项目想要实现一种功能:

  单击一个按钮或超链接,然后会出现其他的超链接,这时要让其中的一个超链接被单击,以显示一个初始页面。(公司页面使用了frameset)很显然,之后的超链接单击事件需要通过JavaScript来触发。

  一开始,我想到了用jQuery的click()事件来触发超链接的单击事件(与trigger("click")一样的效果)。结果发现不如人意。

  实例如下:

  Html代码

 


h3>请单击”Click Me"。测试提交按钮与超链接是否也被单击了。</h3>  
  <button id="btn">Click Me</button>  
  <form action="#">  
    <input type="text" name="userName" value="徐新华-polaris" readonly/>  
    <input id="submit" type="submit" value="别点击此按钮提交" onclick="alert('触发了提交按钮的单击事件!');"/>  
  </form>  
  <a id="aLink" href="http://www.google.cn" onclick = "alert('触发了超链接的单击事件!');">代码触发超链接</a>

 

 

  Javascript代码

 


   $(function() 
  { 
  $("#btn").click(function() 
  { 
  $("#submit").click(); 
  $("#aLink").click(); 
  }); 
  });

 

  当单击:Click Me按钮时,先后弹出提交按钮被单击、超链接被单击的对话框,这表明两者的单击事件都被触发了。然而,从地址栏中可以看到,提交按钮的单击事件触发后,执行了它的默认行为:提交表单;可是超链接的单击事件触发后,并没有链接到目标地址。(不要怀疑说是提交按钮的提交地址对超链接有影响,因为我去掉提交按钮,只留下超链接也不会链接到目标地址。)

  也许jQuery中的click()方法对超链接的单击事件并没有使其执行浏览器的默认行为(即使你手动加入return true也没有用)。注意:tigger("click")与click()一样的。jQuery文档中说“这个函数也会导致浏览器同名的默认行为的执行”。同名的?不太明白,但是超链接的确不能执行它的默认行为。这是,只能想另外的方法——抛弃jQuery提供的事件。

  回到JavaScript自己的事件——click。代码如下:

  Javascript代码

 


   $(function() 
  { 
  $("#btn").click(function() 
  { 
  $("#submit").click(); 
  $("#aLink").get(0).click(); 
  }); 
  });

 

  在IE中一测试,通过了……有点兴奋。可是,在fireFox中却提示:click()不是一个function。说真的,IE浏览器提供的东西对开发人员来说很好,而fireFox却没有,比如之前说到的onpropertychange等。不过,我们必须的考虑IE之外的浏览器。在网上查资料,有不少人提到在fireFox中要用代码触发一个事件,需要如下处理:

  Javascript代码

 


 var evt = document.createEvent("MouseEvents"); 
  evt.initEvent("click", false, false);// 或用initMouseEvent(),不过需要更多参数 
  $("#aLink").get(0).dispatchEvent(evt); 
  按以上方法来实现我想要的功能,代码如下: 
  Javascript代码 
  $(function() 
  { 
  $("#btn").click(function() 
  { 
  $("#submit").click(); 
  if($.browser.msie) 
  { 
  $("#aLink").get(0).click(); 
  } 
  else 
  { 
  var evt = document.createEvent("MouseEvents"); 
  evt.initEvent("click", false, false); 
  $("#aLink").get(0).dispatchEvent(evt); 
  } 
  }); 
  });

 

  这时,在IE中是完全正常的。然而,在fireFox中的情况与直接使用jQuery的click()事件一样,能触发单击事件,超链接却没有转到目标地址(注意:提交按钮用此方法也是能够提交的,我想jQuery的click()的实现大概是这样实现的吧)。哎,觉得还是IE好。呵呵。

  如此一来,这种方法仍然不能解决FireFox中的问题。得继续寻找其他方法。

  既然在fireFox中能够触发单击事件,却不能转到超链接的目标地址,那么,可以用js来实现跳转,即:使用location对象。代码如下:

  Javascript代码

 


 $(function() 
  { 
  $("#btn").click(function() 
  { 
  $("#submit").click(); 
  if($.browser.msie) 
  { 
  $("#aLink").get(0).click(); 
  } 
  else 
  { 
  // 绑定单击事件 
  $("#aLink").click(function() 
  { 
  document.location = $(this).attr("href");// window.location = $(this).attr("href");也可以,但是执行的时间不同 
  }); 
  // 触发单击事件 
  $("#aLink").click(); 
  } 
  }); 
  });

 

  这样就大功告成。有一个地方要说明一下:document.location与window.location。这两个都可以,然而他们的执行时间不同,window的执行时间较早。读者可以自己试试。

  虽然实现了这个例子,然而,运用到项目中却出问题了,因为项目中使用了frameset(虽然现在很多人不建议使用frameset,但项目用了也没办法,得这样做)。因此需要指定链接的目标url在哪个frame中显示,然而,通过中的target是无法实现的,因为根本不会执行默认行为,需要通过js来实现。中写上target,如之类的。希望按target的要求触发超链接。当然,这是非IE浏览器有的问题。

  我们知道,document代表当前的页面(当前执行元素所在页面)。如果我们能够找到当前超链接的url希望放入的frame,我们就可以找到它对象的document。当然找到超链接url希望放入的frame很容易,这是由你自己决定将其放到哪的。示例代码如下:

  Javascript代码

 


  window.parent.frames['view'].

      document.location = $("#aLink").attr("href");

 

  其中,'view'是超链接url希望放入的frame的name或id(最好是id和name命名一样)。建议IE中别用上面的方法,而用前面介绍的click()方法。

  现在已经解决了所有的问题。可能还有人会有这种需求:就是在

  实际上,下面我要介绍的方法是通用行的。可以替代window.parent.frames['view'].document.location。代码如下:

  Javascript代码

 


  window.open($(this).attr("href"),$(this).attr("target"));

 

  如果没有定义target属性,默认会当成'_blank'处理,这与用户单击超链接的效果不一样。这种方式是跨浏览器的,所以,只需要要用这种方式即可。这时,回到用jQuery+原始JavaScirpt来实现,这时最终、个人认为最好的方法。完整最终代码如下:

  Html代码

 


  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
<html>  
    <head>  
        <title>JavaScript模拟用户单击事件——徐新华 polaris</title>  
     
        <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">  
        <meta http-equiv="description" content="this is my page">  
        <meta http-equiv="content-type" content="text/html; charset=UTF-8">  

  <!-- 引入jQuery -->  
  <script type="text/javascript" src="scripts/jQuery/jquery-1.3.2.js"></script>  
  <script type="text/javascript">  
    /**     
    * 模拟用户单击事件 处理超链接的问题  
    * @author xuxinhua  
    */  
    $(function()  
    {  
      $("#btn").click(function()  
      {  
        $("#submit").click();  
          
        // 绑定单击事件  
        $("#aLink").click(function()  
        {  
          window.open($(this).attr("href"),$(this).attr("target"));  
        });  
             
        // 触发单击事件(会执行所有绑定的单击事件处理函数)  
        $("#aLink").click();  
      });  
    });  
  </script>  
    </head>  
      
    <body>  
      <h3>请单击”Click Me"。测试提交按钮与超链接是否也被单击了。</h3>  
  <button id="btn">Click Me</button>  
  <form action="#">  
    <input type="text" name="userName" value="徐新华-polaris" readonly/>  
    <input id="submit" type="submit" value="别点击此按钮提交" onclick="alert('触发了提交按钮的单击事件!');"/>  
  </form>  
  <a id="aLink" href="http://www.google.cn" target="_self" onclick = "alert('触发了超链接的单击事件!');">代码触发超链接</a>  
    </body>  
      
</html>

 

  注意:需要此处需要先绑定一个click处理函数,然后再触发click事件

  总结:

  网上有一些JavaScript模拟用户单击事件的文章,但是都不全面,总会有这样那样的问题。虽然,我在此列举了众多的方法,觉得基本的问题都应该解决了,然而还是有可能有人遇到新的问题。

 

转载:http://www.evget.com/zh-CN/Info/catalog/14174.html

 

分享到:
评论

相关推荐

    巧用Jquery巧用Jquery巧用Jquery巧用Jquery

    本篇文章将深入探讨如何巧用jQuery,以提高开发效率和用户体验。 首先,jQuery的核心功能是选择器。它借鉴了CSS的选择器语法,使开发者能够轻松地选取DOM元素。例如,`$("#id")`可以选取ID为"id"的元素,`$(".class...

    模拟用户单击事件demo

    在IT行业中,模拟用户单击事件是常见的自动化测试或网页交互技术。这个“模拟用户单击事件demo”可能是一个示例项目,展示了如何在不同页面之间传递参数,并根据接收到的参数来触发特定的点击事件。以下是这个话题的...

    jQuery JavaScript Library v1.4.2

    jQuery JavaScript Library v1.4.2

    JavaScript和jquery实战手册

    JavaScript和jQuery是Web开发中的两种关键技术,它们在创建交互式网页和动态用户界面方面发挥着重要作用。本实战手册旨在深入探讨这两种技术的核心概念、语法以及实际应用,帮助开发者提升技能并构建高效、响应式的...

    JavaScript(jquery)写的模拟弹幕效果

    在网页中实现模拟弹幕效果,通常是通过 JavaScript 的动态更新DOM(文档对象模型)以及 jQuery 的便捷操作DOM接口来完成的。弹幕效果,常见于视频网站或者直播平台,让用户留言仿佛在屏幕上流动,增加了互动性。 ...

    精通JavaScript+jQuery曾顺

    精通JavaScript+jQuery 曾顺 配套有书中的列子

    jquery input文本框模拟select选择框获取选定

    对于标题提到的"jquery input文本框模拟select选择框获取选定",这是一个常见的需求,特别是在需要用户从一系列选项中进行选择但又希望保持界面简洁的情况下。这里我们将详细讨论如何使用jQuery来实现这个功能。 ...

    JQuery模拟系统桌面

    "jQuery模拟系统桌面"就是这样一个技术应用,它利用JavaScript库jQuery及其相关的UI组件,实现了一种类似真实操作系统桌面的效果。这篇文章将深入探讨这一主题,介绍如何使用jQuery和相关插件来构建一个模拟的Web...

    精通JavaScript与jQuery

    例如,你可以使用JavaScript进行数据验证,然后用jQuery来处理验证失败时的提示或者成功时的页面更新。同时,两者结合可以创建动态的Ajax请求,实现无刷新的数据交换。 为了进一步提高技能,初学者应该通过实践来...

    JavaScript+jQuery网页特效设计实例源码

    4. **表单验证**:使用JavaScript和jQuery对用户输入进行实时验证,提高数据提交的准确性。 5. **滑动面板和模态窗口**:用于显示额外信息或对话框,增强用户体验。 6. **响应式设计**:随着设备屏幕尺寸变化,...

    深入理解jquery和javascript系列

    深入理解JavaScript和jQuery是Web开发中的重要课题,这两者都是前端开发者不可或缺的工具。JavaScript作为浏览器端的主要脚本语言,负责动态交互,而jQuery则是一个轻量级的库,极大地简化了JavaScript的DOM操作,...

    JavaScript+jQuery程序设计 源码

    JavaScript 和 jQuery 是两种广泛应用于网页开发的编程工具。JavaScript 是一种轻量级的脚本语言,主要用于客户端的网页交互,而 jQuery 是一个 JavaScript 库,它简化了 JavaScript 的使用,使得DOM操作、事件处理...

    JavaScript+jQuery实现途乐行(旅游型)htm页面

    这个项目的核心是利用HTML、JavaScript和jQuery来构建用户友好的交互界面,提供丰富的旅游信息展示和交互功能。下面将详细介绍这三个技术在网页开发中的作用以及它们如何协同工作。 首先,HTML(HyperText Markup ...

    精通Javascript+jQuery 源码 免费

    JavaScript 和 jQuery 是 web 开发中不可或缺的工具,它们在创建交互式、动态网站方面发挥着重要作用。本资源提供了这两门技术的源码,对于学习和深入理解它们的工作原理极具价值。 JavaScript,作为 web 的主要...

    jquery模拟select效果实现

    在网页开发中,jQuery是一个非常流行的JavaScript库,它简化了DOM操作、事件处理以及动画制作等任务。在某些情况下,由于设计或交互需求,我们可能需要对原生的HTML元素进行自定义,例如模拟select下拉菜单的效果。...

    精通JavaScript.jQuery

    JavaScript、jQuery精通一次、一遍

    《JavaScript和jQuery实战手册 原书第3版》PDF

    《JavaScript和jQuery实战手册 原书第3版》是一本深入浅出的编程指南,专为想要掌握JavaScript和jQuery的开发者所设计。这本书详细介绍了这两种技术的核心概念、语法以及在实际开发中的应用,旨在帮助读者提升Web...

    JavaScript&jQuery;交互式Web前端开发

    通过将编程理论与用来演示JavaScript和jQuery如何被应用于流行站点之上的示例相结合,《JavaScript&jQuery;交互式Web前端开发》将教会您如何让网站更具交互性、吸引性、可用性。很快,您就能够像一名程序员那样去...

Global site tag (gtag.js) - Google Analytics