Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/364.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/88.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.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
为什么这个html/javascript组合会以这种方式打印? Ovi地图API示例 点击我! 点击我! 点击我!_Javascript_Jquery_Javascript Events - Fatal编程技术网

为什么这个html/javascript组合会以这种方式打印? Ovi地图API示例 点击我! 点击我! 点击我!

为什么这个html/javascript组合会以这种方式打印? Ovi地图API示例 点击我! 点击我! 点击我!,javascript,jquery,javascript-events,Javascript,Jquery,Javascript Events,而且 <!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/h

而且

<!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>Ovi Maps API Example</title>

  </head>
  <body>
      <button id="butt1" name="butt" type="button">Click Me!</button>
      <button id="butt2" name="butt" type="button">Click Me!</button>
      <button id="butt3" name="butt" type="button">Click Me!</button>
  </body>
   <script src="jquery.js" type="text/javascript" charset="utf-8"></script>
   <script src="foo.js" type="text/javascript" charset="utf-8"></script>
</html>
$(文档).ready(函数(){
//警惕(“准备就绪”);
var myClickFunctions=新数组();
//向所有三个按钮添加事件处理程序

对于(var i=1;i,因为每次函数循环时,您都为同一个变量分配一个新值,因此,当单击任何按钮时,var索引为4

让每个锚定标记打印其索引的快速方法是附加以下内容:

$(document).ready(function() {
//alert("ready");
var myClickFunctions = new Array();

//add event handlers to all three buttons
for(var i=1;i<=3;i++){

  myClickFunctions[i]=function(){
    var index = i;
    alert(index);
  }

  var buttonID = "#butt";
  var button  = $(buttonID + i);    
  button.click(myClickFunctions[i]);
}
我能看到的唯一问题是,我怀疑对象相等性比较只有在被比较的两个DOM元素完全相同时才会验证为真,但它们可以


此外,尽管如此,您在这里试图实现的最终目标是什么(因为我确信,在单击任何锚定时用警报骚扰用户的页面不是您预期的最终目标).

因为每次函数循环时都会给同一个变量分配一个新值,因此,当单击任何按钮时,var索引都是4

让每个锚定标记打印其索引的快速方法是附加以下内容:

$(document).ready(function() {
//alert("ready");
var myClickFunctions = new Array();

//add event handlers to all three buttons
for(var i=1;i<=3;i++){

  myClickFunctions[i]=function(){
    var index = i;
    alert(index);
  }

  var buttonID = "#butt";
  var button  = $(buttonID + i);    
  button.click(myClickFunctions[i]);
}
我能看到的唯一问题是,我怀疑对象相等性比较只有在被比较的两个DOM元素完全相同时才会验证为真,但它们可以


此外,尽管如此,您在这里试图实现的最终目标是什么(因为我确信,在单击任何锚定时,让用户收到警告的页面不是您的预期最终目标)。

阅读JavaScript闭包及其工作原理。事实是
按钮中的
I
。单击(myClickFunctions[I])
底部的结尾将是4。请记住,在声明函数时不设置var index=i,只有在调用函数时才设置。您需要做的是将函数包装在一个闭包中,如下所示:

$('a').click(function() {
    var theAnchors = $('a');
    for (i in theAnchors)
        if (theAnchors[i] == this)
            alert(i);
});
或者更好的做法是:

  myClickFunctions[i]=(function(i){
    return function(){
      var index = i;
      alert(index);
    }
  })(i)

myClickFunctions函数将获取i的当前值,并返回一个已设置该值的函数。这是正确的方法。

阅读JavaScript闭包及其工作原理。事实是
按钮中的
i
。单击(myClickFunctions[i])
底部的结尾将是4。请记住,在声明函数时不设置var index=i,只有在调用函数时才设置。您需要做的是将函数包装在一个闭包中,如下所示:

$('a').click(function() {
    var theAnchors = $('a');
    for (i in theAnchors)
        if (theAnchors[i] == this)
            alert(i);
});
或者更好的做法是:

  myClickFunctions[i]=(function(i){
    return function(){
      var index = i;
      alert(index);
    }
  })(i)

myClickFunctions函数将取i的当前值,并返回一个已设置该值的函数。这是正确的方法。

您正在将匿名函数设置为
myClickFunctions[i]
正在围绕
i
创建一个闭包。闭包在变量本身上关闭,而不是在闭包时的值。因此,当函数实际运行时,
i
是4,因此您将始终得到4

一个简单的修复方法是调用一个返回函数的函数,并捕获i的当前值

//put this anywhere
function myClickFunctions(i){
  return function(){
    alert(i);
  }
}

//and at the end:
button.click(myClickFunctions(i));

如果这让人困惑,那么我建议阅读JavaScript中的闭包。过一段时间,闭包就成了第二天性。

您正在设置的匿名函数
myClickFunctions[I]
正在围绕
i
创建一个闭包。闭包在变量本身上关闭,而不是在闭包时的值。因此,当函数实际运行时,
i
是4,因此您将始终得到4

一个简单的修复方法是调用一个返回函数的函数,并捕获i的当前值

//put this anywhere
function myClickFunctions(i){
  return function(){
    alert(i);
  }
}

//and at the end:
button.click(myClickFunctions(i));
如果这让人困惑,那么我建议阅读JavaScript中的闭包。它们在一段时间后成为第二天性。

循环结束时“I”的值是“4”,因此每次单击按钮时,显示的数字是“4”,因为您正在访问“I”的引用当你点击按钮时,函数正在执行,而不是在循环过程中

如果你想得到与按钮id相同的“i”号,那么我建议这样做

myClickFunctions[i] = (function(curI) {
     return function() {
        var index = curI;
        alert(index);
     };
})(i);
$(文档).ready(函数(){
//警惕(“准备就绪”);
var myClickFunctions=新数组();
//向所有三个按钮添加事件处理程序
对于(var i=1;i循环结束时的“i”值为“4”,因此每次单击按钮时,将显示的数字为“4”,因为您访问的是“i”的引用,而函数是在单击按钮时执行的,而不是在循环期间

如果你想得到与按钮id相同的“i”号,那么我建议这样做

myClickFunctions[i] = (function(curI) {
     return function() {
        var index = curI;
        alert(index);
     };
})(i);
$(文档).ready(函数(){
//警惕(“准备就绪”);
var myClickFunctions=新数组();
//向所有三个按钮添加事件处理程序

对于(var i=1;iThanks,你能提供更多的细节吗?我的大脑工作的方式表明,这是因为所有函数都共享对i的引用,因为作用域链接的工作方式?我希望我能在Javascript中的变量作用域方面为你提供更多帮助,但我不是专家。我知道的足够多,可以说,与nu相比,它相对古怪在JavaScript中使用
for…in
循环可能会导致意外的结果。不能保证它会按顺序循环项目,而且还存在处理继承属性的问题。标准d for loop会更好。如果页面有很多锚,这也可能会很昂贵。是的,我通过艰难的方式了解到了这一点。我不打算将此示例逐字使用,只是作为参考。谢谢,你能提供更多细节吗?我的大脑工作方式表明,这是因为所有函数都共享对我的引用作用域链接工作方式的原因?我希望我能在Javascript中的变量作用域方面为您提供更多帮助,但我不是专家