Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/454.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在dom:加载之前处理浏览器本机单击_Javascript_Onclick_Cross Browser_Prototypejs_Dom Events - Fatal编程技术网

Javascript 在dom:加载之前处理浏览器本机单击

Javascript 在dom:加载之前处理浏览器本机单击,javascript,onclick,cross-browser,prototypejs,dom-events,Javascript,Onclick,Cross Browser,Prototypejs,Dom Events,我对跨浏览器本机事件与回调事件存在问题 我有一个带有给定href=“”的HTML链接“单击我”。在dom:loaded上,我给这个链接附加了一个函数(用来做Ajax的事情) JavaScript代码在页面末尾加载,以遵循YSlow建议 问题: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

我对跨浏览器本机事件与回调事件存在问题

我有一个带有给定
href=“”
的HTML链接“单击我”。在
dom:loaded
上,我给这个链接附加了一个函数(用来做Ajax的事情)

JavaScript代码在页面末尾加载,以遵循YSlow建议

问题

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
  <head>
  </head>
  <body>

    <a href="#toolate" id="action">Click Me</a>

    <!-- According to YSlow Recommandation load at the bottom -->
    <script src="../js/lib/prototype.js" type="text/javascript" language="JavaScript"></script>
    <script>
      /* <![CDATA[ */
      document.observe('dom:loaded', function() { 
        $('action').observe('click', function(event){ alert("click"); Event.stop(event); });
      });
      /* ]]> */
    </script>
  </body>
</html>
如果你加载这个页面很快(按F5),然后点击链接,然后

  • 未调用
    警报()
  • 随后是链接(重新加载页面)
当服务器延迟时就会发生这种情况。事实上,页面尚未完成加载,浏览器正在执行代码

演示

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
  <head>
  </head>
  <body>

    <a href="#toolate" id="action">Click Me</a>

    <!-- According to YSlow Recommandation load at the bottom -->
    <script src="../js/lib/prototype.js" type="text/javascript" language="JavaScript"></script>
    <script>
      /* <![CDATA[ */
      document.observe('dom:loaded', function() { 
        $('action').observe('click', function(event){ alert("click"); Event.stop(event); });
      });
      /* ]]> */
    </script>
  </body>
</html>

它适用于滞后,但不适用于快速单击。我不喜欢这种转变,因为我的目标是删除所有

上的
onclick
,您可以查看以下内容:

JQuery有一个方便的小函数 尽快启动javascript 文档对象模型已准备就绪… 这发生在页面打开之前 装载完毕

你也可以在页面加载时在所有内容前面放置一个大的禁用div,以禁止点击,但我不建议这样做


不确定我是否正确回答了你的问题,如果我没有回答,请告诉我。你可以调查一下:

JQuery有一个方便的小函数 尽快启动javascript 文档对象模型已准备就绪… 这发生在页面打开之前 装载完毕

你也可以在页面加载时在所有内容前面放置一个大的禁用div,以禁止点击,但我不建议这样做


不确定我是否正确回答了你的问题,如果我没有回答,请告诉我。看起来你手头的事情很好,你所要做的就是创建一些链接,这些链接在不可能进行优雅降级的地方毫无用处

在这些情况下,我建议使用以下格式的链接:

<a href="javascript:void(0);">Linktext</a>

在启用或禁用javascript的情况下,此链接在功能上完全不起任何作用

重要注意事项

  • 空格中的数字零是绝对必要的。InternetExplorer则会抱怨
  • 微软强烈反对使用“javascript:void(0);”,因为奇怪的事情可能会发生。为了避免大多数错误,请不要在空白(0)链接中包装除文本以外的任何内容
  • 在您做出决定之前,请务必仔细考虑添加“JavaScript:无效(0)”是否比添加返回false的OnCutter更好的解决方案。 删除href属性时:

    从链接中删除href属性是有效的XHTML。尽管是有效的XHTML,但您的链接将丢失其自动链接样式。如果访问链接,则不再有下划线、颜色、悬停和自动颜色更改


    由于Internet Explorer中对:hover的不稳定支持,你也无法用CSS修复样式的缺乏。

    看起来你手头有很多东西,你所要做的就是创建一些链接,这些链接在不可能进行优雅降级的领域中毫无用处

    在这些情况下,我建议使用以下格式的链接:

    <a href="javascript:void(0);">Linktext</a>
    
    
    
    在启用或禁用javascript的情况下,此链接在功能上完全不起任何作用

    重要注意事项

  • 空格中的数字零是绝对必要的。InternetExplorer则会抱怨
  • 微软强烈反对使用“javascript:void(0);”,因为奇怪的事情可能会发生。为了避免大多数错误,请不要在空白(0)链接中包装除文本以外的任何内容
  • 在您做出决定之前,请务必仔细考虑添加“JavaScript:无效(0)”是否比添加返回false的OnCutter更好的解决方案。 删除href属性时:

    从链接中删除href属性是有效的XHTML。尽管是有效的XHTML,但您的链接将丢失其自动链接样式。如果访问链接,则不再有下划线、颜色、悬停和自动颜色更改


    由于Internet Explorer中对:hover的零星支持,您也无法修复CSS样式的不足。

    我们已经在许多浏览器上对CMS进行了许多测试

    按速度排序:

  • 在快速点击之前,JavaScript无法执行
  • onclick=“return false”在大多数情况下都可以正常工作
  • JavaScript正在执行2.)onLoad速度太慢,但可能不够
  • DIV用作盾牌会带来其他问题,不是一个好的选择

  • 我们已经在很多浏览器上对CMS进行了很多测试

    按速度排序:

  • 在快速点击之前,JavaScript无法执行
  • onclick=“return false”在大多数情况下都可以正常工作
  • JavaScript正在执行2.)onLoad速度太慢,但可能不够
  • DIV用作盾牌会带来其他问题,不是一个好的选择

  • 您是否可以禁用该控件,然后在文档加载完成后启用它?换句话说,如果您可以在页面加载之前处理单击,则在页面加载之前不允许单击。同意,但您如何对浏览器说:“在文档加载完成之前不要遵循ahref”?你可以使用JavaScript,但引擎还没有启动。我添加了一个演示:你的目标是什么?要让链接在页面加载之前什么都不做,javascript会在哪一点接管?如果是,请删除href组件。你在寻找优雅的堕落吗?如果是这样的话,那么你的href应该完成与javascript操作相同的操作,所以在页面加载之前单击它应该不会有问题有时我会在JS代码+优雅降级中执行此操作有时我不能,需要链接什么也不做。如果我删除href组件,它是否有效?我以为它会成为锚?这就是为什么我经常看到href=“#”谢谢