2017-03-14 5 views
0

yii2動的フォームとjavascript関数についての記事を読んだことがあります。 InsaneSkullのソリューションは完璧です。しかし、私は1つの質問があります。 例: 私はwbragancaの動的フォームを使用していますが、の変更イベント(javascript)を呼び出そうとしています。このyii2ダイナミックフォームwbragancaは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))',                 
     ]                
]) ?> 

まずのような私のコードは、私は、Info機能がまだ定義されていないので、それがエラーを与えた

<?php 
$script = <<< JS 

function Info(item){ 
    var index = item.attr("id").replace(/[^0-9.]/g, "");   
    alert(index);   
}; 

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

以下のような情報機能を登録してみてください。

第2に、私はAppAssetに登録していました。

私の質問:違いは何ですか? *(私はそれが範囲だと思う)。 AppAssetでレジスタの横に関数を定義する方法は?

答えて

1

上記のスクリプトはどこに登録しますか?ビュー使用ウィジェットの後で、JSが登録されているデフォルトの位置はPOS_READY public void registerJs ($js, $position = self::POS_READY, $key = null)使用ウィジェットの後にスクリプトを配置する場合は、POS_BEGINまたはPOS_HEADの位置を使用してください。それ以外の場合は、ウィジェットクラスをオーバーライドして、runメソッドレンダリングウィジェットの前に実行されているウィジェットのメソッドinitにこのスクリプトを挿入できます。

+0

ウィジェットオプションではなく、スクリプトにイベント変更ハンドラを登録することもできます。 $( '。form-control')を使ってみてください。( 'change'、Info) –

+0

うん、うまくいきます。ありがとう。どうして? –

+0

よろしくお願いいたします。ウィジェットオプションで変更ハンドラを定義すると、widgetはこのハンドラを関数の前にレンダリングするためです。 –

関連する問題