我已经阅读了一些关于yii2动态表单和javascript函数的文章。 InsaneSkull给出的解决方案是完美的。但我有一个问题。 例如: 我正在使用来自wbraganca的动态表单并尝试调用函数 onchange事件(javascript)。我的代码就像这样
<?= $form->field($detail, "[{$i}]qty")->widget(\yii\widgets\MaskedInput::className(),
[
'clientOptions' => [
'alias' => 'numeric',
'groupSeparator' => ',',
'digits' => 0,
'autoGroup' => true,
'removeMaskOnSubmit' => true,
'rightAlign' => false,
],
'options' => [
'class' => 'form-control',
'onchange' => 'Info($(this))',
]
]) ?>
首先,我尝试注册以下信息功能
<?php
$script = <<< JS
function Info(item){
var index = item.attr("id").replace(/[^0-9.]/g, "");
alert(index);
};
JS;
$this->registerJs($script);
?>
它给出了错误,因为Info函数尚未定义。
其次,我在AppAsset中注册并且它有效。
我的问题:有什么区别? *(我认为这是范围)。 如何定义AppAsset中注册旁边的功能?
答案 0 :(得分:1)
你在哪里注册上面的脚本?如果在使用widget之后的视图中,JS注册的默认位置是POS_READY public void registerJs ( $js, $position = self::POS_READY, $key = null )
如果要在使用小部件之后放置脚本,请尝试使用位置POS_BEGIN或POS_HEAD。否则,您可以覆盖窗口小部件类,并将此脚本放入窗口小部件的init
方法中,该方法在run
方法呈现窗口小部件之前执行。