相关疑难解决方法(0)

为什么setTimeout(fn,0)有时会有用?

我最近遇到了一个相当讨厌的错误,其中代码是<select>通过JavaScript动态加载的.这种动态加载<select>具有预先选择的值.在IE6中,我们已经有了修复所选内容的代码<option>,因为有时它<select>selectedIndex值与所选<option>index属性不同步,如下所示:

field.selectedIndex = element.index;
Run Code Online (Sandbox Code Playgroud)

但是,此代码无效.即使selectedIndex正确设置了字段,最终也会选择错误的索引.但是,如果我alert()在正确的时间插入声明,则会选择正确的选项.考虑到这可能是某种时间问题,我尝试了一些随机的东西,我之前在代码中看到过:

var wrapFn = (function() {
    var myField = field;
    var myElement = element;

    return function() {
        myField.selectedIndex = myElement.index;
    }
})();
setTimeout(wrapFn, 0);
Run Code Online (Sandbox Code Playgroud)

这有效!

我已经找到了解决问题的方法,但是我很不安,因为我不知道为什么这会解决我的问题.有人有官方解释吗?使用"稍后"调用我的功能可以避免哪些浏览器问题setTimeout()

javascript dom event-loop

833
推荐指数
11
解决办法
23万
查看次数

了解Layman术语中的异步代码

我理解异步的基本内容:事情不按顺序执行.据我所知,有一些非常强大的东西...... 但对于我的生活,我无法绕过代码.让我们来看看我写过的异步Node.JS代码......但是没有真正得到.

function newuser(response, postData) {
    console.log("Request handler 'newuser' was called.");
    var body = '<html>' + 
        '<head>' +
        '<meta http-equiv="Content-Type" content="text/html; ' +
        'charset=UTF-8" />' +
        '</head>' +
        '<body>' +
        '<form action=" /thanks" method="post">' +
        '<h1> First Name </h1>' +
        '<textarea name="text" rows="1" cols="20"></textarea>' +
        '<h1> Last Name </h1>' +
        '<textarea name="text" rows="1" cols="20"></textarea>' +
        '<h1> Email </h1>' +
        '<textarea name="text" rows="1" cols="20"></textarea>' +
        '<input type="submit" value="Submit text" />' +
        '</body>' +
        '</html>';
    response.writeHead(200, { "Content-Type": "text/html" });
    response.write(body);
    response.end(); …
Run Code Online (Sandbox Code Playgroud)

javascript asynchronous node.js

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

在setTimeout中使用async有效吗?

我在Javascript中有一个异步函数,我添加了setTimeout.代码看起来像这样:

        let timer;
        clearTimeout(timer);
        timer =setTimeout(() => {
        (async() => {
            await this._doSomething();
        })();
        }, 2000);
Run Code Online (Sandbox Code Playgroud)

setTimeout的puprose是在运行函数之前加2秒.确保用户停止输入.

我现在应该从此函数中删除async/await,因为setTimeout是异步的吗?

任何帮助在这里非常感谢!

javascript asynchronous settimeout ecmascript-2017

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

在文本框中键入最后一个数字时,第一个数字会进入

当我输入最后一个数字时,第一个数字进入text-box(它消失)里面,它增加了一个额外的空格。

在此处输入图片说明

在此处输入图片说明

在我点击外部后,text-box它看起来不错,这是我在输入最后一个字符时需要的。 在此处输入图片说明

  #number_text {
        padding-left: 9px;
        letter-spacing: 31px;
        border: 0;
        background-image: linear-gradient(to right, #e1e1e1 70%, rgba(255, 255, 255, 0) 0%);
        background-position: left bottom;
        background-size: 38px 1px;
        background-repeat: repeat-x;
        width: 220px;
        box-sizing: border-box;
        outline:none;
    }
Run Code Online (Sandbox Code Playgroud)
<input type="text" id="number_text" maxlength="6"  pattern="\d{6}" value="1234" >
Run Code Online (Sandbox Code Playgroud)

帮助我摆脱这个问题。谢谢

html javascript css jquery

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

使用 Promise 的 JavaScript 调度器实现

我正在解决这个有趣的 javascript 问题(面试问题),但我一直在思考如何使用 promise 来实现它。

问题:

用 JavaScript 编写一个调度程序,它接受最大并发任务数作为参数并调度任务(每个任务可能需要任意时间才能完成)。

请注意,在继续执行其他任务之前,我们一次只需要执行“n”个(并发)任务。

这是我的实现:

var exampleTaskA = function () {
    setTimeout(function () {
        console.log('Task A Done');
    }, 1000);
};

function TaskRunner(concurrency) {
    this.limit = concurrency;
    this.store = [];
    this.len = this.store.length;
}

TaskRunner.prototype.push = function (task) {
    this.store.push(task);
    function getWorker(store, limit) {
        if(!store.length) return;

        if(store.length <= limit) {
            const cur = store.shift();
            if(cur) cur();
            getWorker(store, limit);
        }
    }

    getWorker(this.store, this.limit);
}

var task = new TaskRunner(2);
console.log(task.push(exampleTaskA));
console.log(task.push(exampleTaskA));
console.log(task.push(exampleTaskA)); 
console.log(task.push(exampleTaskA));
console.log(task.push(exampleTaskA));
console.log(task.push(exampleTaskA));
console.log(task.push(exampleTaskA)); …
Run Code Online (Sandbox Code Playgroud)

javascript asynchronous

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