zoukankan      html  css  js  c++  java
  • 最大限度地分离html和javascript代码

    先看以下页面:  

    代码
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>    
        
    <title>test</title>
        
    <script type="text/javascript">
           
    function $(s){
            
    return document.getElementById(s);
        }
        
    function f1(){        
            alert(
    "hello world!");
        }
        
    function init(){
            
    var obj=$("btn1");    
            obj.addEventListener(
    "click",f1,false);
        }
        
    </script>
    </head>
    <body onload="init()">
    <input type="button" value="Test3" id="btn1">
    </body>
    </html

    html和JavaScript的交点只在于 body的onload事件(当然聪明的你当然会懂得怎么消灭这最后的交点,呵呵!),细看代码你会发觉按钮(btn1)标签中不再显式的通过onclick调用某JavaScript函数,而是在JavaScript中绑定按钮标签和相关的函数,这样的话就实现表现与行为的分离,代码又变得优雅多了

    但是,细心的你会发现上面的代码在Firefox中有效,而在IE中却没有效果了。

    这是因为IE和Firefox的方法在处理这个问题上是不同的,于是页面修改为以下的页面:

    代码
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>    
        
    <title>test</title>
        
    <script type="text/javascript">
           
    function $(s){
            
    return document.getElementById(s);
        }
        
    function f1(){        
            alert(
    "hello world!");
        }
        
    function init(){
            
    var obj=$("btn1");    
            obj.attachEvent(
    "onclick",f1);
        }
        
    </script>
    </head>
    <body onload="init()">
    <input type="button" value="Test3" id="btn1">
    </body>
    </html>

    不过这样的话IE倒是没有问题了,但这时Firefox就不行了,那么怎么解决呢!!

    其实我们可以通过判断浏览器是IE还是Firefox来执行不同的方法,从而兼容IE和Firefox。

    代码
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>    
        
    <title>test</title>
        
    <script type="text/javascript">
           
    function $(s){
            
    return document.getElementById(s);
        }
        
    function f1(){        
            alert(
    "hello world!");
        }
        
    function init(){
            
    var obj=$("btn1");    
            
    if(window.ActiveXObject){
                obj.attachEvent(
    "onclick",f1);
            }
    else{
                obj.addEventListener(
    "click",f1,false);
            }
        }
        
    </script>
    </head>
    <body onload="init()">
    <input type="button" value="Test3" id="btn1">
    </body>
    </html>

    注意:ActiveXObject的大小写(AXO这三个字母大写其他则小写)。

    另外ie下也可以通过下面的方式来取消事件的绑定:

    代码
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>无标题文档</title>
    <script type="text/javascript">
        
    function fnClick(){
            alert(
    "你点击了一次!");
            onec.detachEvent(
    "onclick",fnClick);
        }
        
    var onec;
        window.onload
    =function(){
            onec
    =document.getElementById("onec");
            onec.attachEvent(
    "onclick",fnClick);
        }
    </script>
    </head>
    <body>
    <id="onec">only one click</p>
    </body>
    </html>

    但是在Firefox下的代码应该为:

    代码
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>无标题文档</title>
    <script type="text/javascript">        
        
    function fnClick(){
            alert(
    "你点击了一次!");
            onec.removeEventListener(
    "click",fnClick,false);
        }
        
    var onec;
        window.onload
    =function(){
            onec
    =document.getElementById("onec");
            onec.addEventListener(
    "click",fnClick,false);
        }
    </script>
    </head>
    <body>
    <id="onec">only one click</p>
    </body>
    </html>
  • 相关阅读:
    SpringCloud学习教程
    Google浏览器插件推荐
    谷歌身份验证器使用
    js控制某个div在页面加载完成5秒后隐藏
    通过城市联动实时将地址显示到text中
    百度地图通过地址查询并且定位
    yii2.0验证码的两种实现方式
    yii2.0 中数据查询中 or、in、between 及session的使用
    Calling unknown method: appmodulesmobilecontrollersCompanyController::redirect()
    页面权限跳转
  • 原文地址:https://www.cnblogs.com/Fskjb/p/1674559.html
Copyright © 2011-2022 走看看