【问题标题】:pass variable through unobtrusive JavaScript通过不显眼的 JavaScript 传递变量
【发布时间】:2013-01-12 05:00:54
【问题描述】:

我想将变量从按钮传递给事件处理程序,但我不知道正确的方法是什么。 x线和y线都不好。但我需要这样的东西。

在html头中

window.onload = function()
{
    var myButton = document.getElementsByTagName("button");

    for (var i = 0; i < myButton.length; i++)
    {
        myButton[i].onclick = function()        // <-- line x
        {                
            alert(myButton[i].data1);           // <-- line y
        }
    }
}

在html正文中

<button type = "button" data1 = "John" data2 = "52">Click Me</button>
<button type = "button" data1 = "Peter" data2 = "26">Click Me</button>
<button type = "button" data1 = "Mary" data2 = "44">Click Me</button>

【问题讨论】:

    标签: unobtrusive-javascript


    【解决方案1】:

    看看我刚刚整理的这个 JSFiddle 示例:http://jsfiddle.net/BshLK/1/

    您的代码示例的问题是 i 在您的事件处理程序运行时未定义,因为它只有在循环运行时才具有它的值。要更正它,首先您需要访问您调用事件的元素,其次您需要使用getAttribute() 来获取属性值。

    【讨论】:

      【解决方案2】:

      根据您的 onload 事件,我猜您没有使用 jquery,但如果您不介意 jquery,我会看一下 data() 方法。你可以做类似的事情

      $(function(){
          $("#button1").data("name", "value"); //your example would pass ("data","abcdefg");
          //Click handler.
          $("#button1").click(function(o,e){
               alert(o.data("name")); // alerts out "value"
          }
      }
      

      然后您可以使用该元素的选择器访问该数据。

      Link to the documentation

      【讨论】:

      • 因为,当然,jQuery 可以解决所有问题。您不能可能只使用setAttribute("data-name","value")getAttribute("data-name")。两个功能合二为一?没有人能以这样的速度工作!
      • @Kolkink - 老实说,我在学习 javascript 之前学习了 jQuery。 (这是可能的!)我只是默认使用这些方法。我什至不知道 get/set 属性方法。谢谢你学习我:D
      • 是的,好吧...我坚信 jQuery 应该只供已经了解 JavaScript 的人使用。当然,一旦你了解了 JavaScript,你就知道你不需要 jQuery(你编写自己的函数),因此 jQuery 甚至不应该存在。
      • 每个人都有自己的锤子。 :)
      • 是的。我的恰好是我用我切割的木头和我锻造的金属手工制作的,而不仅仅是去当地的沃尔玛 XD
      猜你喜欢
      • 2011-10-19
      • 2018-06-28
      • 2011-07-23
      • 1970-01-01
      • 1970-01-01
      • 2014-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多