Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/80.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
Javascript 回调仍然不';行不通_Javascript_Jquery_Callback - Fatal编程技术网

Javascript 回调仍然不';行不通

Javascript 回调仍然不';行不通,javascript,jquery,callback,Javascript,Jquery,Callback,几个小时前我写了这篇文章,在那里我有几个有趣的答案,但我不能完全理解,现在我不能使用这篇文章。所以我创建了一个新的 我在这段代码中遇到回调问题: <div id='temp'></div> <div id='points'></div> <div onClick ="play(1, 1)" id='click'>clickclickclick</div> <script> play(function (ad

几个小时前我写了这篇文章,在那里我有几个有趣的答案,但我不能完全理解,现在我不能使用这篇文章。所以我创建了一个新的

我在这段代码中遇到回调问题:

<div id='temp'></div>
<div id='points'></div> 
<div onClick ="play(1, 1)" id='click'>clickclickclick</div> 

<script>
play(function (addpoints) {
    document.getElementById('temp').innerHTML = addpoints;
}());

function play (choosecolor, randescolor) {
    if (choosecolor == randescolor) {
        if (document.getElementById('points').innerHTML === '') {
            document.getElementById('points').innerHTML=100;
        }
        else {
            var points = function (allpoints) {
                var addpoints = parseInt(allpoints) + 100;
                callback(addpoints);

                document.getElementById('points').innerHTML=addpoints;
            }
        }

        points(document.getElementById('points').innerHTML);
    }
}

点击点击点击
播放(功能)(添加点){
document.getElementById('temp')。innerHTML=addpoints;
}());
功能播放(选择颜色、随机颜色){
如果(choosecolor==randescolor){
if(document.getElementById('points').innerHTML=''){
document.getElementById('points')。innerHTML=100;
}
否则{
变量点=函数(所有点){
var addpoints=parseInt(所有点)+100;
回调(addpoints);
document.getElementById('points')。innerHTML=addpoints;
}
}
点(document.getElementById('points').innerHTML);
}
}

我理解函数回调不会将var addpoint及其值发送给第二个函数,所以在第二个函数中,addpoint是未定义的。但我不明白为什么addpoints会丢失它的值(但我可以在div中显示它),回调会做什么以及如何更正它。一些用户建议我选择颜色(addpoints);而不是回调(addpoints);但它仍然不起作用

经过一些思考和研究。我突然意识到我在什么地方错了。这里是解决方案,传递最后一个参数-这是您要回调的函数的名称。现在,这将按照您希望的方式工作。 现在,我提到了第三个参数,作为我想在这个函数之后调用的函数的名称

<div id='temp'></div>
<div id='points'></div> 
<div onClick ="play(1, 1, newcallback)" id='click'>clickclickclick</div> 

这里是小提琴:

当您调用
play()
时DOM准备好了吗?这段代码非常混乱。您实际上调用了
play(未定义,未定义)
,这会触发
if(choosecolor==randescolor)
,可能是出于偶然。即使您确实传入了
choosecolor
,您也从未真正执行过它。如果
choosecolor
不应该是回调函数,那么至少应该从匿名函数中返回一些内容示例中明显缺少的代码部分。此外,在代码中的任何地方都没有调用回调。我猜play的两个参数应该是回调函数,但你永远不会传递回调函数。您正在传递一个值来播放,在本例中,该值是未定义的,因为它来自一个无效函数调用。我在所有代码中都进行了更正。假设这是OP想要的逻辑,并且这是一个非常明确的假设,您在
函数play
的定义中缺少了第三个参数,因此我应该在play()中添加变量addpoint作为第三个参数?@RGraham,现在可以编辑了吗?正如你所说,我遗漏了第三个参数。你说得对。欢迎,我也为同样的东西做了一把小提琴。我正要把它寄出去。
function newcallback(addpoints) {
    document.getElementById('temp').innerHTML = addpoints; //undefined
});

function play (choosecolor, randescolor,callback) {
    if (choosecolor == randescolor) {
        if (document.getElementById('points').innerHTML === '') {
            document.getElementById('points').innerHTML=100;
        }
        else {
            var points = function (allpoints) {
                var addpoints = parseInt(allpoints) + 100;
                callback(addpoints);

                document.getElementById('points').innerHTML=addpoints;
            }
        }

        points(document.getElementById('points').innerHTML);
    }
}