Nano Hash - криптовалюты, майнинг, программирование

Ввод формы не очищается после отправки ajax

У меня есть форма с одним полем и кнопкой отправки с опцией отправки ajax, например:

public function buildForm(array $form, FormStateInterface $form_state, $id = 0)
{       
    $form['fieldset']['message'] = array(
        '#type' => 'textfield',
        '#default_value' => "",
        '#required' => true,
        '#attributes' => array(
            'placeholder' => t('write here'),
        ),
    );

    $form['actions']['submit'] = array(
        '#type' => 'submit',
        '#value' => $this->t('Send'),
        '#attributes' => array(
            'class' => array(
            ),
        ),
        '#ajax' => [
            'callback' => [$this, 'Ajaxsubmit'],
            'event' => 'click']
    );
    return $form;
}

Функция ajax следующая:

public function Ajaxsubmit(array $form, FormStateInterface $form_state)
    {
        $user = \Drupal\user\Entity\User::load(\Drupal::currentUser()->id());
        $db_values = [
            "message" => $form_state->getValue("message"),
            "date_create" => date("Y-m-d H:i:s"),
        ];
        $save = DbStorage::Insert($db_values);
        //$('#mychat_form input').val("");
        //$form_state->setValue('content', NULL);

        $response = new AjaxResponse();

        if ($form_state->hasAnyErrors() || !$save) {
               $response->addCommand(new AlertCommand('something wrong!'));
        } else {

        $message = DbStorage::Get(["id" => $save]);
        $send_id = $message->send_id;
        $build = [
                '#theme' => "chat_view",
                '#message' => $message,
                '#sender' => $send_id,
                '#current_user' => true
            ];
        $ans_text = render($build);
        $response->addCommand(new AppendCommand('#mychat', $ans_text));
        }
        return $response;

    }

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

$('#my_form input').val("");  

Но проблема в том, что мой файл javascript вызывается каждые 3 секунды, и ввод формы также очищается каждые 3 секунды. это проблема для пользователей. Есть ли другой способ очистить ввод формы после отправки ajax? Могу ли я что-нибудь сделать внутри функции Ajaxsubmit?

20.04.2018

  • Вы пробовали DataCommand() $response->addCommand(new DataCommand('#my_form input', 'value','')); 22.04.2018
  • вы имеете в виду в форме вместо $response-›addCommand(new AppendCommand('#mychat', $ans_text)); я должен использовать $response-›addCommand(new DataCommand('#mychat', $ans_text)); ? 22.04.2018
  • Добавить оба $response->addCommand(new DataCommand('#mychat', $ans_text)); для обновления #mychat. Другой для замены $('#my_form input').val(""); из JS. 22.04.2018
  • мой JS запускается каждые 3 секунды. это хорошая идея, чтобы очистить форму ввода от JS? 22.04.2018
  • как насчет прокрутки? мне нужно держать полосу прокрутки внизу, если полоса прокрутки не перетаскивается. вот почему $(#mychat).blur(функция() не работает? 22.04.2018
  • я использовал оба типа $response-›addCommand(new DataCommand('#my_form input', 'value', '')); $response-›addCommand(new AppendCommand('#my_chat', $ans_text)); но не очищает форму 23.04.2018
  • Вы добавили `использовать Drupal\Core\Ajax\DataCommand;` вверху. 23.04.2018
  • да, я добавил использование Drupal\Core\Ajax\DataCommand;` вверху. но не очищает форму 23.04.2018

Ответы:


1

Вы можете использовать InvokeCommand для этого.

Например: чтобы очистить входное значение $('#my_form input').val(""); в ответе ajax

use Drupal\Core\Ajax\HtmlCommand;
use Drupal\Core\Ajax\InvokeCommand;
use Drupal\Core\Ajax\AppendCommand;
:

$form['fieldset']['message'] = array(
  '#type' => 'textfield',
  '#default_value' => "",
  '#required' => true,
  '#attributes' => array(
    'placeholder' => t('write here'),
    'class' => ['custom-class'],
  ),
);

В функции Ajax

:
$build = [
  '#theme' => "chat_view",
  '#message' => $message,
  '#sender' => $send_id,
  '#current_user' => true
];
$response->addCommand(new AppendCommand('#mychat', $build));
$response->addCommand(new InvokeCommand('.custom-class', 'val', ['']));
23.04.2018
  • он очищает форму в первый раз, но со второго раза, когда я ввожу новое сообщение, кнопка отправки не работает, и ввод формы не очищается 23.04.2018
  • в любом случае, должен ли я использовать $('#my_form input').val(); в моем файле javascript тоже? 23.04.2018
  • мое определение формы: $form['fieldset']['message'] = array( '#type' =› 'textfield', '#default_value' =› , '#required' =› true, '#attributes' =› array( 'placeholder' =› t('напишите здесь'), ), ); как добавить пользовательский класс здесь? 24.04.2018
  • огромное спасибо. мне также нужно добавить $('#my_form input').val(); в моем JS? 24.04.2018
  • это сработало ! но иногда он показывает сообщение дважды в чате 24.04.2018
  • Не нужно добавлять его в JS. Возможно, вы нажимаете кнопку дважды. 24.04.2018
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..