2015-06-05 2 views
-1

Я написал сообщение несколько часов назад, где у меня есть несколько интересных ответов, но я не понимаю все, и теперь я не могу использовать этот пост. Поэтому я создаю одно новое.callback все еще не работает

я подоконник есть проблема с обратным вызовом в этом коде:

<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); 
    } 
} 

Я uderstand, что функция обратного вызова не посылает уаг addpoint с его значением для второй функции, поэтому во второй функции addpoints не определено. Но я не понимаю, почему addpoints теряют свою ценность (но я могу показать его в div), какой callback делать и как это исправлять. Некоторый пользователь дал мне совет, что я должен выбрать choosecolor (addpoints); вместо callback (addpoints); но он все еще не работает.

+0

ли DOM готов, когда вы вызываете 'играть()' ? – George

+0

Этот код очень запутан. Вы по сути называете 'play (undefined, undefined)', который запускает ваш 'if (choosecolor == randescolor)', предположительно случайно. Даже если вы перешли в 'choosecolor', вы никогда его не исполняете. И если 'choosecolor' не должен быть обратным вызовом, вы должны хотя бы вернуть что-то из своей анонимной функции. – CodingIntrigue

+0

В этом примере есть части вашего кода, которые явно отсутствуют. Также вы вызываете обратный вызов в коде. Я думаю, что два параметра для воспроизведения должны быть функциями обратного вызова, но вы никогда не передаете функцию обратного вызова. Вы передаете одно значение для воспроизведения, которое в этом случае не определено, поскольку оно исходит из вызова функции void. –

ответ

-1

После некоторых мыслей и исследований. я пришел, что я где-то ошибся. Вот решение, передайте последний параметр - это имя функции, которую вы хотите перезвонить. Теперь это будет работать так, как вы хотите, чтобы он работал. Теперь я упомянул третий параметр как имя функции, которую я хочу вызвать после этой функции.

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

Здесь я объявил newcallback функцию, которую я буду называть после этого метода:

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); 
    } 
} 

Вот скрипка: JsFiddle

+1

Предполагая, что это логика, которую захочет OP, и это, безусловно, предположение, вы не указали третий параметр в своем определении 'function play' – CodingIntrigue

+0

Итак, я должен добавить переменную addpoint в качестве третьего параметра в play()? – FKa

+0

@RGraham, это сейчас редактирование? Мне не хватало третьего параметра, как вы сказали. Ты был прав. –

Смежные вопросы