Вызов функции JavaScript из поля формы Yii2

1

Я пытаюсь создать функцию JS для подсчета символов textarea в реальном времени в Yii2. В нормальном HTML, следующий код работает нормально:

<textarea id="text" onkeyup="count();" placeholder="Enter Some Text"></textarea>

Однако сопоставление этого кода с элементами формы Yii2 дает мне проблему. Это то, что я пробовал, и функция count() не обнаружена:

<?= $form->field($model, 'message')->textarea(['placeholder' => '1 message = 160 characters','rows' => 6, 'onkeyup' => 'count();']) ?>

Может ли быть что-то, что я делаю неправильно? Ниже приведен мой полный код формы:

<?php

use yii\helpers\Html;
use kartik\widgets\ActiveForm;
use kartik\builder\Form;
use kartik\datecontrol\DateControl;

/**
 * @var yii\web\View $this
 * @var app\models\Messages $model
 * @var yii\widgets\ActiveForm $form
 */

/* start getting the totalamount */
$script = <<<EOD
    function count()
    {
      var total = document.getElementById("messages-message").value;
      total = total.replace(/\s/g, '');
      document.getElementById("total").innerHTML="Total Characters:"+total.length;
    }
EOD;

$this->registerJs($script);
?>

<div class="messages-form">
    <?php 
        $form = ActiveForm::begin([
            'id' => 'messages-form-vertical', 
            'type' => ActiveForm::TYPE_VERTICAL
        ]); 
    ?>

    <?= $form->field($model, 'type')->textInput(['placeholder' => 'Enter Type...']) ?>

    <?= $form->field($model, 'senderID')->textInput(['placeholder' => 'Enter Sender ID...', 'maxlength' => 15]) ?>

    <?= $form->field($model, 'recepient_mobile')->textInput(['placeholder' => 'Enter Recepient Mobile...', 'maxlength' => 15]) ?>

    <?= $form->field($model, 'characters')->textInput(['placeholder' => 'Enter Characters...']) ?>

    <?= $form->field($model, 'status')->textInput(['placeholder' => 'Enter Status...', 'maxlength' => 50]) ?>

    <?= $form->field($model, 'sms_count')->textInput() ?>

    <?= $form->field($model, 'message')->textarea(['placeholder' => '1 message = 160 characters','rows' => 6, 'onkeyup' => 'count();']) ?>

    <p id="total">Total Characters:0</p>

    <div class="form-group">
        <?php echo Html::submitButton($model->isNewRecord ? Yii::t('app', 'Create') : Yii::t('app', 'Update'),
            ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']
        ); ?>
    </div>

    <?php ActiveForm::end(); ?>
</div>

Спасибо за помощь.

Теги:
yii2
active-form

1 ответ

2
Лучший ответ

Вы должны использовать:

$this->registerJs($script, View::POS_HEAD);

По умолчанию registerJs() использует POS_READY как $position. Это означает, что JavaScript будет заключен в jQuery(document).ready(), поэтому определенные функции man не будут доступны в глобальном контексте.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню