【问题标题】:OnClick without jQuery没有 jQuery 的 OnClick
【发布时间】:2018-10-15 23:24:29
【问题描述】:

如何制作onclick无需 jQuery,HTML中无需额外代码,如:

<a href="#" onclick="tramtramtram">

只是使用外部的js文件?

<script type="text/javascript" src="functions.js"></script>

我需要替换这段代码:

$("a.scroll-up, a.scroll-down").click(function(){
    SNavigate($(this).attr("href").substr(7));return false;
});

【问题讨论】:

    标签: javascript onclick


    【解决方案1】:

    当这个锚点只包含一个处理点击的函数时,你可以写

    document.getElementById('anchorID').onclick=function(){/* some code */}
    

    否则,你必须使用 DOM 方法 addEventListener

    function clickHandler(){ /* some code */ }
    var anchor = document.getElementById('anchorID');
    if(anchor.addEventListener) // DOM method
      anchor.addEventListener('click', clickHandler, false);
    else if(anchor.attachEvent) // this is for IE, because it doesn't support addEventListener
       anchor.attachEvent('onclick', function(){ return clickHandler.apply(anchor, [window.event]}); // this strange part for making the keyword 'this' indicate the clicked anchor
    

    还记得在加载所有元素时调用上述代码(例如在 window.onload 上)

    --编辑

    我看到你添加了一些细节。如果你想替换下面的代码

    $("a.scroll-up, a.scroll-down").click(function(){SNavigate($(this).attr("href").substr(7));return false;});
    

    对于不使用 jQuery 的东西,这应该可以完成工作

    function addEvent(obj, type, fn) {
            if (obj.addEventListener)
                    obj.addEventListener(type, fn, false);
            else if (obj.attachEvent)
                    obj.attachEvent('on' + type, function() { return fn.apply(obj, [window.event]);});
    }
    addEvent(window, 'load', function(){
       for(var i=0, a=document.anchors, l=a.length; i<l;++i){
          if(a[i].className == 'scroll-up' || a[i].className == 'scroll-down'){
             addEvent(a[i], 'click', function(e){ SNavigate(this.href.substr(7)); e.returnValue=false; if(e.preventDefault)e.preventDefault();return false});
          }
       }
    });
    

    【讨论】:

    【解决方案2】:

    这个怎么样:

    document.getElementById("lady").onclick = function () {alert('onclick');};
    

    【讨论】:

    • 看起来不错。不使用jquery,可以用普通js替换给定函数吗?
    • 只覆盖 onlick 属性。如果您使用 addEventListener,您还必须跟踪您添加的内容以便以后删除它(这无疑是 JQuery 自己使用的)。
    • @Mike:那是“普通的”javascript。除了它通过 id 而不是像您的代码那样按类获取元素。
    • @Anonymous :谢谢,您如何通过 addEventListener 跟踪 atteched 事件?
    【解决方案3】:

    W3C 建议:

    element.addEventListener('click',doSomething,false)
    

    微软使用:

    element.attachEvent('onclick',doSomething)
    

    您可以进行一些特征检测并确定使用哪个调用。

    来自http://www.quirksmode.org/js/events_advanced.html

    【讨论】:

    • 您可以稍后删除该事件吗?如果它是一个无名事件怎么办,比如函数声明,即。 foo.addEventListener('onclick', function(){alert('bar') );还是永久连接?
    • (我只是好奇,顺便说一句,我不需要这段代码……只是在读这篇文章,我突然想到了这个问题)。
    • 您通过 element.removeEventListener (WC3) 或 element.detachEvent (MS) 删除事件。不幸的是,这不适用于匿名函数。我会保留事件处理程序的命名函数。
    【解决方案4】:

    在 html 中没有额外的代码,这是一种方法:

    <html><body><head><script>  // This script could be in an external JS file
    function my_handler(elt) {
        alert("Yay!");
        return false;
    }
    
    function setup() {
        document.getElementById('lady').onclick = my_handler;
    }
    
    window.onload = setup;
    </script></head>
    <body><a href='#' id='lady'>Test</a></body>
    </html>
    

    【讨论】:

    • 可以不使用jquery,用普通js替换给定函数吗?
    • 那个普通的JavaScript,没有使用jQuery。
    【解决方案5】:
    <script>
     function tramtramtram(){
         alert("tram it!");
     }
    </script>
    
    
    <a href="#" onclick="tramtramtram()">tramtram</a>
    

    【讨论】:

    • 我不知道我们谁先到这里 ;-)
    • 我需要从 html 中删除所有“onclick”
    【解决方案6】:

    var el =document.getElementById('lady'); el.addEventListener( "点击", tramtramtram, false );

    【讨论】:

      【解决方案7】:

      在加载文档时执行此脚本(用您的东西替换警报):

      var rgLinks = document.getElementsByTagName("A");
      
      for (var x=0; x<rgLinks.length; x++) {
          el = rgLinks[x];
      
          if (el.className == 'scroll-down' || el.className == 'scroll-down')
              {
              el.onclick = function () {alert('onclick');};
              }
          }
      

      也许这就是你要问的......

      【讨论】:

        【解决方案8】:

        只需使用onclick 属性。

        <a href="#" onclick="functionName(someParam)">
        

        或者用javascript来做,

        document.getElementById("anchorID").onclick = function(){
           some code
        };
        

        【讨论】:

        • 我需要从 html 中删除所有“onclick”
        • 由于新问题使用类选择器而不是 id,因此您必须首先自己查找所有使用该类的元素。在 google 中查看 getElementsByClass 的许多实现。
        【解决方案9】:

        您需要使用 getElementById 来添加 onclick 处理程序。但是,您需要在某处启动您的代码。如果没有 jQuery,你只能使用 body onload 处理程序:

        <body onload="myinitfunction()">
        

        myinitfunction 可以在外部 js 文件中。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-01-19
          • 2013-08-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-01-21
          • 1970-01-01
          相关资源
          最近更新 更多