解决所有点击事件的所有承诺

时间:2017-05-17 16:13:00

标签: javascript onclick promise

假设我们有4个表单,每个表单有4个比率按钮,值为1-4。

我想在每个表单和Promise.all(pforms)中附加一个Promise,以便能够从点击中添加所选的值。我想在所有表单都有一些点击事件后返回所有承诺。

基本dom(将此数字乘以4并从group1更新名称 - group4)

<form>
    <input type="radio" name="group4" value="1">
    <input type="radio" name="group4" value="2">
    <input type="radio" name="group4" value="3">
    <input type="radio" name="group4" value="4">
</form>

脚本

    <script>

        var pForms = $('form').map(function () {
            var _this = this;

            var click = new Promise(function (resolve, reject) {
                $(_this).one('click', function () {
                    resolve($(_this).find('input[type="radio"]:checked').val());
                });
            });

            return click;

        }).toArray();

        Promise.all(pForms)
            .then(function (results) {
                console.log(results);
            });

    </script>

目前,当只发生一次点击事件时,它会重新承诺所有承诺。

编辑 - 现在工作正常

2 个答案:

答案 0 :(得分:0)

找出一个有效的解决方案。

    <script>
        function getValue () {
            return $(this).find('input[type="radio"]:checked').val();
        }

        var pForms = $('form').map(function () {
            var _this = this;

            return new Promise(function (resolve, reject) {

                $(_this).one('click', function () {
                    resolve(getValue.call(_this));
                });

            });

        }).toArray();

        Promise.all(pForms)
            .then(function (results) {
                console.log(results);
            });

    </script>

答案 1 :(得分:-1)

保持简单。这不是你使用它的html元素,也没有写一个变量来定义这个