2016-02-24 7 views
0

Я строю Chatbot, некоторые из сценариев являютсяфункция Javascript не связывая к следующему

var convpatterns = new Array (
new Array (".*hi.*", "Hello there! ","Greetings!"), 
new Array (".*ask me*.", Smoking), 
new Array (".*no*.", "Why not?"), 

Как вы можете видеть, если набрано пользователь «привет», то Chatbot ответить либо Привет там или Привет! И если пользователь набрал «задавать мне вопрос», он ссылается на функцию Smoking().

function Smoking(){ 
window.iSpeech.speak(speakPluginResultHandler,nativePluginErrorHandler,"Do you smoke?"); 
return field 
SmokingAnswer() 

} 

function SmokingAnswer(){ 
var userinput=document.getElementById("messages").value; 
if (userinput="yes"){ 
window.iSpeech.speak(speakPluginResultHandler,nativePluginErrorHandler,"Oh no! Smoking is not good for your health!"); 
}else if(userinput="no"){ 
window.iSpeech.speak(speakPluginResultHandler,nativePluginErrorHandler,"Good to hear that you are not smoking!"); 
} 
return field 
} 

Таким образом, внутри функции сигарет(), то Chatbot будет устно попросить пользователь «Вы курите?», И он должен затем связать к следующей функции, которая является SmokingAnswer(), где пользователь может либо тип в yes или no, и chatbot затем даст ответ на основе ответа от пользователя. Однако прямо сейчас, если я набрал «задавать мне вопрос», чатбот спрашивает «Ты курите?», Но когда я набираю «нет», вместо того, чтобы говорить «Приятно слышать, что ты не курите!», Чатбот говорит: «Почему бы и нет?» основанный на новом массиве.

Update (изменяется на основании предложения, но до сих пор не работает):

function initialCap(field) { 
field = field.substr(0, 1).toUpperCase() + field.substr(1); 
return field 
} 
function Smoking(){ 
window.iSpeech.speak(speakPluginResultHandler,nativePluginErrorHandler,"Do you smoke?"); 
SmokingAnswer() 

} 

function SmokingAnswer(){ 
var userinput=document.getElementById("messages").value; 
if (userinput=="yes"){ 
window.iSpeech.speak(speakPluginResultHandler,nativePluginErrorHandler,"Oh no! Smoking is not good for your health!"); 
}else if(userinput=="no"){ 
window.iSpeech.speak(speakPluginResultHandler,nativePluginErrorHandler,"Good to hear that you are not smoking!"); 
} 
return field 
} 

ответ

2

сравнения равноправии в JavaScript используется оператор == или ===; = всегда присвоение. Так вот:

if (userinput="yes"){ 

... вы назначая"yes" к userinput, а затем собирается в теле, если (потому что он заканчивает тем, что if ("yes") и "yes" является truthy, поэтому мы следуем за ветку) , Оно должно быть:

if (userinput == "yes"){ 

или

if (userinput === "yes"){ 

Разница между == и === является то, что == (далее «свободный» оператор равенства) будет делать тип принуждения в случае необходимости (иногда удивительным образом), чтобы попытаться чтобы сделать операнды равными, но === не будет (операнды разных типов всегда не равны).

Отдельно:

function Smoking(){ 
window.iSpeech.speak(speakPluginResultHandler,nativePluginErrorHandler,"Do you smoke?"); 
return field 
SmokingAnswer() 
} 

SmokingAnswer функция никогда не будет называться там, потому что это послеreturn field. Таким образом, функция Smoking возвращается до вызова SmokingAnswer или выдает ошибку, потому что field не определено (оно нигде не отображается в вашем коде); в любом случае, SmokingAnswer никогда не называется.


Side Примечание: Ваш первоначальный массив может быть более сжато написан с массивами инициализаторами:

var convpatterns = [ 
    [".*hi.*", "Hello there! ","Greetings!"], 
    [".*ask me*.", Smoking], 
    [".*no*.", "Why not?"], 
    // ... 
]; 

Вы также можете посмотреть в литералы регулярных выражений, а не строки (/.*hi.*/ вместо ".*hi.*"), так как вы не Не нужно беспокоиться о двух уровнях экранирования с помощью литерала регулярного выражения.

+0

См. Мой обновленный вопрос, он все еще не работает. Но цените предложения о контрпартнерах! – michelle9090

+1

@ michelle9090: Изменение вопросов для включения ответов (или иначе сделать ответы неактуальными) заключается не в том, как работает SO. Это не для интерактивной отладки, а для вопросов и ответов. –

+0

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