【问题标题】:How to replace html href link with button如何用按钮替换html href链接
【发布时间】:2014-05-19 17:05:12
【问题描述】:

我有一个包含 Javascript 的 HTML 页面(见下文)。

在 HTML 页面中有一个调用 Javascript 函数的 HTML 代码行。 这完全可以正常工作,看起来像这样:

<a href="#" id="hour">hour</a> 

此代码行从以下 Javascript 的最后部分调用。

我希望用一个按钮替换此代码行。我该怎么做?

谢谢

ps Javascript 是用于 dygraph 的,我没有写。我对Javascript知之甚少。我只是想用一个完成相同工作的按钮替换上面的单行 html,或者通过其他简约的更改生成一个按钮。

$(document).ready(function () {
    var r = [ ];
    var base_time = Date.parse("2014/03/05");
    var num = 24 * 0.25 * 365;

    for (var i = 0; i < num; i++) {
        r.push([
            new Date(base_time + i * 3600 * 1000),
            i + 50 * (i % 60),        // line
            i * (num - i) * 4.0 / num  // parabola
        ]);
    }

    var orig_range = [
        r[0][0].valueOf(),
        r[r.length - 1][0].valueOf()
    ];

    // NEW CODE INSERTED -   STARTS
    var one_month_previous = new Date();
    one_month_previous.setMonth(one_month_previous.getMonth() - 1);

    var one_week_previous = new Date();
    one_week_previous.setDate(one_week_previous.getDate()-7);

    var three_days_previous = new Date();
    three_days_previous.setDate(three_days_previous.getDate()-3);

    var one_days_previous = new Date();
    one_days_previous.setDate(one_days_previous.getDate()-1);

    var twelve_hours_previous = new Date();
    twelve_hours_previous.setHours(twelve_hours_previous.getHours() - 12);


    // NEW CODE INSERTED -   ENDS

    g = new Dygraph(
        document.getElementById("graphdiv3"),
        "show_csv.php",
        {

            // NEW CODE INSERTED -   STARTS
            //  dateWindow: [ Date.parse(one_month_previous) ,
            //            Date.parse(new Date()) ],

            dateWindow: [
                    Date.parse(one_week_previous),
                    Date.parse(new Date())
            ],

            //  dateWindow: [ Date.parse(three_days_previous) ,
            //            Date.parse(new Date()) ],

            //  dateWindow: [ Date.parse(one_days_previous) ,
            //            Date.parse(new Date()) ],

            //  dateWindow: [ Date.parse(twelve_hours_previous) ,
            //            Date.parse(new Date()) ],

            //  dateWindow: [ Date.parse("2014/03/01 12:00:00"),    
            //            Date.parse("2014/03/31 12:00:00") ],   

            // NEW CODE INSERTED -   ENDS

            title: 'Temperature(&deg;C) vs Time',
            rollPeriod: 1,
            showRoller: true,
            xlabel: 'Time',
            ylabel: 'Temperature (&deg;C)',
            legend: 'always',
            labelsKMB: 'true',
            labelsSeparateLines: 'true',
            colors: [
                "rgb(51,204,204)",
                "#00DD55",
                "rgb(255,100,100)",
                "rgba(50,50,200,0.4)"
            ]
        }
    );


    var desired_range = null;

    function approach_range() {
        if (!desired_range) return;
        // go halfway there
        var range = g.xAxisRange();

        if (Math.abs(desired_range[0] - range[0]) < 60 &&
            Math.abs(desired_range[1] - range[1]) < 60) {
                g.updateOptions({dateWindow: desired_range});
                // (do not set another timeout.)
        } else {
            var new_range;
            new_range = [
                0.5 * (desired_range[0] + range[0]),
                0.5 * (desired_range[1] + range[1])
            ];
            g.updateOptions({dateWindow: new_range});
            animate();
        }
    }

    function animate() {
        setTimeout(approach_range, 50);
    }

    var zoom = function(res) {
        var w = g.xAxisRange();
        desired_range = [ w[0], w[0] + res * 1000 ];
        animate();
    }

    var reset = function() {
        desired_range = orig_range;
        animate();
    }

    var pan = function(dir) {
        var w = g.xAxisRange();
        var scale = w[1] - w[0];
        var amount = scale * 0.25 * dir;
        desired_range = [
            w[0] + amount,
            w[1] + amount
        ];
        animate();
    }

    document.getElementById('hour').onclick = function() { zoom(3600); };
    document.getElementById('day').onclick = function() { zoom(86400); };
    document.getElementById('week').onclick = function() { zoom(604800); };
    document.getElementById('month').onclick = function() { zoom(30 * 86400); };
    document.getElementById('full').onclick = function() { reset(); };
    document.getElementById('left').onclick = function() { pan(-1); };
    document.getElementById('right').onclick = function() { pan(+1); };
});

【问题讨论】:

  • &lt;button id="hour"&gt;hour&lt;/button&gt;?
  • 另外,您的 HTML 锚没有调用您的 javascript。您的 javascript 绑定到 ID 为“小时”的元素的点击事件,这是您的锚点。
  • 不要使用 Date 构造函数解析字符串:var base_time = +(new Date(2014,2,5));
  • @user1062153 描述“不起作用”
  • one_month_previous 的代码将在比上一个天数多的月末失败,例如31-Jul -> 31-Jun -> 01-Jul31-Mar -> 31-Feb -> 03-Mar 在非闰年。

标签: javascript html button href


【解决方案1】:

如果你想让链接看起来像一个按钮,那么你可以用css为链接设置样式,他看起来像一个按钮。

http://www.usabilitypost.com/2012/01/10/pressed-button-state-with-css3/

【讨论】:

    【解决方案2】:

    现在就按照自己的方式设计吧!=)

    (IE 优化:) 不确定这是否正确。

    <a href="#">
        <button id="hour">Hour</button>
    </a>
    

    普通按钮

    <button id="hour">Hour</button>
    

    表单方法:

    <form action="#">
        <input type="submit" value="submit">
    </form>
    

    【讨论】:

    • 对不起 :D 这是 Internet Explorer 优化的。要使其适用于 IE8,您必须这样做。对不起
    • 我很确定,你必须 -> 我已经在答案中添加了这个
    • 谢谢 Xatenev。早点试过了。
    • 谢谢你们。解决方案是codecode。不知道为什么它以前不起作用。也许我在上面一行中离开codehourcode 掩盖了它。谢谢!
    【解决方案3】:

    罢工>

    Dude 先把 javascript 封装在一个函数里面 //

     function foo()
     {
     $(document).ready(function () {
          var r = [ ];
    
        var base_time = Date.parse("2014/03/05");
    
          var num = 24 * 0.25 * 365;
          for (var i = 0; i < num; i++) {
            r.push([ new Date(base_time + i * 3600 * 1000),
                     i + 50 * (i % 60),        // line
                     i * (num - i) * 4.0 / num  // parabola
                   ]);
          }
          var orig_range = [ r[0][0].valueOf(), r[r.length - 1][0].valueOf() ];
    
    // NEW CODE INSERTED -   STARTS
        var one_month_previous = new Date();
        one_month_previous.setMonth(one_month_previous.getMonth() - 1);
    
        var one_week_previous = new Date();
        one_week_previous.setDate(one_week_previous.getDate()-7);
    
        var three_days_previous = new Date();
        three_days_previous.setDate(three_days_previous.getDate()-3);
    
        var one_days_previous = new Date();
        one_days_previous.setDate(one_days_previous.getDate()-1);
    
        var twelve_hours_previous = new Date();
        twelve_hours_previous.setHours(twelve_hours_previous.getHours() - 12);
    // NEW CODE INSERTED -   ENDS
    
    g = new Dygraph(
        document.getElementById("graphdiv3"),
        "show_csv.php",
        {
    
    // NEW CODE INSERTED -   STARTS
    
    //  dateWindow: [ Date.parse(one_month_previous) ,
    //            Date.parse(new Date()) ],
    
        dateWindow: [ Date.parse(one_week_previous) ,
                  Date.parse(new Date()) ],
    
    //  dateWindow: [ Date.parse(three_days_previous) ,
    //            Date.parse(new Date()) ],
    
    //  dateWindow: [ Date.parse(one_days_previous) ,
    //            Date.parse(new Date()) ],
    
    //  dateWindow: [ Date.parse(twelve_hours_previous) ,
    //            Date.parse(new Date()) ],
    
    //  dateWindow: [ Date.parse("2014/03/01 12:00:00"),    
    //            Date.parse("2014/03/31 12:00:00") ],   
    
    // NEW CODE INSERTED -   ENDS
    
          title: 'Temperature(&deg;C) vs Time',
          rollPeriod: 1,
          showRoller: true,
          xlabel: 'Time',
          ylabel: 'Temperature (&deg;C)',
          legend: 'always',
          labelsKMB: 'true',
          labelsSeparateLines: 'true',
          colors: [
            "rgb(51,204,204)",
            "#00DD55",
            "rgb(255,100,100)",
            "rgba(50,50,200,0.4)"]
        }
      );
    
    
          var desired_range = null;
          function approach_range() {
            if (!desired_range) return;
            // go halfway there
            var range = g.xAxisRange();
            if (Math.abs(desired_range[0] - range[0]) < 60 &&
                Math.abs(desired_range[1] - range[1]) < 60) {
              g.updateOptions({dateWindow: desired_range});
              // (do not set another timeout.)
            } else {
              var new_range;
              new_range = [0.5 * (desired_range[0] + range[0]),
                           0.5 * (desired_range[1] + range[1])];
              g.updateOptions({dateWindow: new_range});
              animate();
            }
          }
          function animate() {
            setTimeout(approach_range, 50);
          }
    
          var zoom = function(res) {
            var w = g.xAxisRange();
            desired_range = [ w[0], w[0] + res * 1000 ];
            animate();
          }
    
          var reset = function() {
            desired_range = orig_range;
            animate();
          }
    
          var pan = function(dir) {
            var w = g.xAxisRange();
            var scale = w[1] - w[0];
            var amount = scale * 0.25 * dir;
            desired_range = [ w[0] + amount, w[1] + amount ];
            animate();
          }
    
          document.getElementById('hour').onclick = function() { zoom(3600); };
          document.getElementById('day').onclick = function() { zoom(86400); };
          document.getElementById('week').onclick = function() { zoom(604800); };
          document.getElementById('month').onclick = function() { zoom(30 * 86400); };
          document.getElementById('full').onclick = function() { reset(); };
          document.getElementById('left').onclick = function() { pan(-1); };
          document.getElementById('right').onclick = function() { pan(+1); };
        }
    );
    }
    
    //]]>  
    </script>
    

    现在,从按钮调用函数

    <button id="hour" onClick="foo()">Hour</button>
    

    编辑:对于 document.ready() 不安全: Is it safe to call $(document).ready() from inside a function?

    编辑:你们是对的,我真的很抱歉,在回答之前我没有看到整个问题。

    user1062153 不需要在 javascript 中做额外的工作,您只需将 id 提供给您正在使用的元素。只需添加

    <button id="hour">Hour</button>
    

    正如 Xatenev 所说。那应该可以正常工作..

    【讨论】:

    • @crush 这说没关系..stackoverflow.com/questions/7142404/…
    • 没关系,但老实说 - 它不是必需的,而且是无用的代码。
    • 谢谢库尼。该脚本与 dygraph 一起使用,我没有编写它,而且我对 Javascript 知之甚少,也不知道如何将它封装在一个函数中。我只是想将 hour 替换为执行相同工作的按钮或通过其他简约更改生成按钮。
    • 当然,它不会炸毁页面。这是完全没有必要的,而且这种解决方案永远无法解决问题。
    • 他的 JS 中有一个功能完善的绑定事件处理程序,但是您要求他在他的 HTML 中放置一个“onclick”标签?
    猜你喜欢
    • 1970-01-01
    • 2018-03-22
    • 1970-01-01
    • 1970-01-01
    • 2011-03-07
    • 2019-08-10
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    相关资源
    最近更新 更多