相关疑难解决方法(0)

循环内的JavaScript闭包 - 简单实用的例子

var funcs = [];
// let's create 3 functions
for (var i = 0; i < 3; i++) {
  // and store them in funcs
  funcs[i] = function() {
    // each should log its value.
    console.log("My value: " + i);
  };
}
for (var j = 0; j < 3; j++) {
  // and now let's run each one to see
  funcs[j]();
}
Run Code Online (Sandbox Code Playgroud)

它输出这个:

我的价值:3
我的价值:3
我的价值:3

而我希望它输出:

我的价值:0
我的价值:1
我的价值:2


使用事件侦听器导致运行函数的延迟时,会出现同样的问题:

var buttons = document.getElementsByTagName("button");
// let's create 3 …
Run Code Online (Sandbox Code Playgroud)

javascript closures loops

2689
推荐指数
25
解决办法
34万
查看次数

在JavaScript中使用Loop的setTimeout

我有一个非常微不足道的问题.对于带有setTimeout的简单循环,如下所示:

for (var count = 0; count < 3; count++) {
    setTimeout(function() {
        alert("Count = " + count);
    }, 1000 * count);
}
Run Code Online (Sandbox Code Playgroud)

console提供如下输出:

Count = 3
Count = 3
Count = 3
Run Code Online (Sandbox Code Playgroud)

不知道为什么输出像这样.有人可以解释一下吗?

javascript

5
推荐指数
1
解决办法
2848
查看次数

以编程方式在 jquery datepicker 上设置多个日期

我想在内联 jQuery 日期选择器上以编程方式设置多个日期。我有一个日期数组,我想循环遍历它们,并且在每次迭代时,应在日期选择器中选择一个日期。

结果应该是在内联 jQuery 日期选择器上选择的多个日期。

这就是我正在尝试的,但我还没有取得太大成功。

for(var j=0; j<dateArr.length; j++){
    $("#inlineDp").datepicker.('setDate',dateArr.pop());
}
Run Code Online (Sandbox Code Playgroud)

javascript jquery datepicker jquery-plugins

5
推荐指数
1
解决办法
4653
查看次数

有没有办法将变量从beforeSend传递给jQuery .ajax函数中的成功函数?

问题

当使用AJAX查询远程API时,由于请求的异步特性,它在完成时都会返回。问题是,当我不得不使用不同的条件对相同的API进行迭代调用时,我不知道会返回哪个响应。

问题:是否可以从中传递变量

示例代码:(简体)

n=5;
for(i=0; i < n; i++) {
  $.ajax({
    url: someURL,
    method: post,
    // I don't want to have to use async: false, that's bad
    // async: false,
    data: JSON.stringify(someData),
    beforeSend: function(){
      console.log("Starting request #"+i)
    },
    error: function(err, code, text) {
      alert("Something went wrong: \n\n" + code + ": " + text);
    },
    success: function(response) {
      console.log("Response for request #"+i)
      console.log(response)
    }
  })
}
Run Code Online (Sandbox Code Playgroud)

问题在于最终的成功功能:我应该看到的是:

Starting request #0
Starting request #1
Starting request #2
Starting request #3 …
Run Code Online (Sandbox Code Playgroud)

ajax jquery

3
推荐指数
1
解决办法
946
查看次数

无法设法在循环内睡觉

我想在1 second每次循环时暂停,在其他情况下通常很容易做类似的暂停,但在使用循环时,似乎变得更难:

for (var i=0 ; i < 10 ; i++) {
    document.write (i + "<br>");
    // I want to wait 1 second here
}
Run Code Online (Sandbox Code Playgroud)

这是我成千上万次尝试失败的一个例子:

function writeMsg (index) {
    document.write (index + "<br>");
}

for (var i=0 ; i < 10 ; i++) {
    setTimeout (writeMsg(i), 1000);
}
Run Code Online (Sandbox Code Playgroud)

有关如何使其工作的任何想法?

javascript sleep loops delay

2
推荐指数
1
解决办法
4482
查看次数

Javascript:如何将不同的对象传递给循环中创建的setTimeout处理程序?

我正在尝试编写一些JS复制jQuery的fadeIn和fadeOut函数.这是我到目前为止的代码:

function fadeIn(elem, d, callback)
{

    var duration = d || 1000;
    var steps = Math.floor(duration / 50);
    setOpacity(elem,0);
    elem.style.display = '';
    for (var i = 1; i <= steps; i++)
    {
        console.log(i/steps + ', ' + (i/steps) * duration);
        setTimeout('setOpacity("elem", '+(i / steps)+' )', (i/steps) * duration);
    }
    if (callback)
        setTimeout(callback,d);
}
function setOpacity(elem, level)
{
    console.log(elem);
    return;
    elem.style.opacity = level;
    elem.style.MozOpacity = level;
    elem.style.KhtmlOpacity = level;
    elem.style.filter = "alpha(opacity=" + (level * 100) + ");";
}
Run Code Online (Sandbox Code Playgroud)

我遇到第一个setTimeout调用的麻烦 - …

javascript object settimeout

1
推荐指数
1
解决办法
4196
查看次数

如何在循环中声明事件处理程序?

有三个按钮.当我点击其中任何一个时 - 我想看到点击按钮的数量<span>.

<button>1st button</button>
<button>2nd button</button>
<button>3rd button</button>

<span></span>
Run Code Online (Sandbox Code Playgroud)

首先,我决定使用for循环,但我知道,它只保留最后一个值.

for ( var i = 0; i< 3; i++ ) {
    $('button:eq(' + i + ')').click(function() {
        $('span').append(i + 'button was clicked');
    });
}
Run Code Online (Sandbox Code Playgroud)

的jsfiddle

也许,$.each()功能会对我有帮助吗?

javascript jquery

0
推荐指数
2
解决办法
101
查看次数