Как принимать ввод пользователя через текстовое поле, когда кто-то вводит определенное предложение?

#javascript #function #variables #if-statement

#javascript #функция #переменные #if-оператор

Вопрос:

Итак, я ввел текстовое поле, которое должно принимать команды от пользователя, что-то вроде виртуального помощника. Когда пользователь вводит «Меня зовут (вставьте здесь имя)» Я хочу, чтобы переменная userName получала то, что написано после «Меня зовут …» Я искал решения в Интернете, но бесполезно… Он продолжает предупреждать меня «idk».

 var userName = "";
var userResponse = document.getElementById("virtual_assistant_body_form_input");
var userResponseField = document.getElementById("virtual_assistant_body_form_input_text_message_field").value; // Selects the field element from the form element.
userResponse.onsubmit = function() { 
    if (userResponseField.includes('My name is') === true) {
        var userName = userResponseField.substr(9, 999);
        alert(userName);
    }
    else {
        alert("idk");
    }
};
 

Комментарии:

1. Вам нужно получить value ПОСЛЕ отправки. Удалить .value из userResponseField и внутри onsubmit , использовать userResponseField.value.includes и userResponseField.value.substr

2. Это было так просто !? Большое вам спасибо! Есть ли какой-нибудь способ отблагодарить вас, подняв репутацию или что-то в этом роде?

3. Вы можете либо удалить его, поскольку это была небольшая ошибка, и это вряд ли поможет будущим читателям. Или, если вы считаете, что это полезно, вы можете принять один из ответов 🙂

Ответ №1:

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

 var userName = "";
var userResponse = document.getElementById("virtual_assistant_body_form_input");
userResponse.onsubmit = function() { 
    var userResponseField = document.getElementById("virtual_assistant_body_form_input_text_message_field").value; // Selects the field element from the form element.
    if (userResponseField.includes('My name is') === true) {
        var userName = userResponseField.substr(9, 999);
        alert(userName);
    }
    else {
        alert("idk");
    }
};
 

Ответ №2:

Основная причина заключается в том, что вы получаете входное значение перед отправкой, поэтому значение, хранящееся в переменной tour userResponseField , не является актуальным, оно не содержит имени.

Приведенный ниже код можно улучшить, но я в автобусе, дайте мне знать, если это решит вашу проблему.

 let userName = '';
const inputText = 'My name is ';
const userResponse = document.getElementById('virtual_assistant_body_form_input');
function getUserResponseField() {
    return document.getElementById('virtual_assistant_body_form_input_text_message_field').value;;
}
userResponse.onsubmit = function() {
    const responseField = getUserResponseField(); // Grabbing the name at this stage, not before
    if (responseField.includes(inputText)) {
        userName = responseField.replace(inputText, '');
        alert(userName);
    }
    else {
        alert('idk');
    }
};