2017-03-14 3 views
0

Ich habe einige Artikel über yii2 dynamische Form und JavaScript-Funktion gelesen. Die Lösung von InsaneSkull ist perfekt. Aber ich habe eine Frage. Beispiel: Ich verwende dynamische Formular von wbraganca und versuchen, Funktion onchange Ereignis (Javascript) aufrufen. Mein Code wie dieseryii2 dynamische Form wbraganca Aufruf Javascript Funktion

<?= $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))',                 
     ]                
]) ?> 

Zuerst versuchen i Info-Funktion wie registrieren unter

<?php 
$script = <<< JS 

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

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

Es gab Fehler, weil Info noch nicht definierte Funktion.

Zweitens registrierte ich in AppAsset und es funktionierte.

Meine Frage: Was sind die Unterschiede? * (Ich denke, es war der Umfang). Wie definiert man die Funktion neben Register in AppAsset?

Antwort

1

Wo registrieren Sie sich über dem Skript? Wenn in Sicht nach Verwendung Widget, Standardposition, bei der JS registriert ist, ist POS_READY public void registerJs ($js, $position = self::POS_READY, $key = null) Versuchen Sie POSITION POS_BEGIN oder POS_HEAD zu verwenden, wenn Sie das Skript nach Verwendung Widget einfügen möchten. Andernfalls können Sie die Widget-Klasse überschreiben und dieses Skript in die init Methode des Widgets einfügen, die vor run Methode gerenderten Widget ausgeführt wird.

+0

Sie können auch Event Change Handler in Ihrem Skript, nicht in Widget-Optionen registrieren. Versuchen Sie $ ('. Form-control') zu verwenden. On ('change', Info) –

+0

Ja, es funktioniert. Vielen Dank. Warum? –

+0

Sie sind willkommen. Wenn Sie den Änderungs- handler in Widgetoptionen definieren, rendern Sie diesen Handler vor dem Skript mit Ihrer Funktion. –