2015-01-13 3 views
5

Ich bin neu in Yii2, und ich habe Schwierigkeiten, eine anonyme Funktion durch Drücken einer Yii2-Taste auszulösen. Unten sind 6 Proben, von denen die ersten beiden OK sind. Aber das ist nicht genau das, was ich haben möchte. Ich würde gerne wissen, wie ich eine anonyme Funktion arbeiten kann, wie Fälle für "Button 3" und "Button 5". Ich habe getestet, wie man einen Funktionsaufruf über Controller macht, und das funktioniert ok, aber das ist nicht das, was ich will. Ich würde Ihre Hilfe sehr schätzen - danke!Yii2 Button onclick anonyme Funktion

// This works 
$button1 = Button::begin ( 
[ 
'label' => 'Button 1', 
'options' => [ 
    'class' => 'btn btn-primary', 
    'onclick' => 'alert("Button 1 clicked");', 
    ], 
]); 
$button1->run(); 

// This works 
echo Html::button('Button 2', [ 'class' => 'btn btn-primary', 'onclick' => 'alert("Button 2 clicked");' ]); 

// This DOES NOT work 
echo Html::button('Button 3', [ 'class' => 'btn btn-primary', 'onclick' => 'function ($event) { alert("Button 3 clicked"); }' ]); 

// This DOES NOT work 
$button4 = Button::begin ( 
[ 
'label' => 'Button 4', 
'options' => [ 
    'class' => 'btn btn-primary', 
    // 'onclick' => 'alert("Button 1 clicked");', 
    ], 
]); 
$button4->on('onclick', 'alert("Button 4 clicked");'); 
$button4->run(); 


// This DOES NOT work 
$button5 = Button::begin ( 
[ 
'label' => 'Button 5', 
'options' => [ 
    'class' => 'btn btn-primary', 
    'onclick' => 'function ($event) { alert("Button 5 clicked"); }', 
    ], 
]); 
$button5->run(); 

// This DOES NOT work 
$button6 = Button::begin ( 
[ 
'label' => 'Button 6', 
'options' => [ 
    'class' => 'btn btn-primary', 
    //'onclick' => 'function ($event) { alert("Button 4 clicked"); }', 
    ], 
]); 
$button6->on('onclick', 'function ($event) { alert("Button 6 clicked"); }'); 
$button6->run(); 

Antwort

8

Sie können Ihre anonyme Funktion in self-executing anonyme Funktion ()() wickeln.

So würde Ihr zweites Beispiel in etwa so aussehen.

echo Html::button('Button 3', [ 'class' => 'btn btn-primary', 'onclick' => '(function ($event) { alert("Button 3 clicked"); })();' ]); 

Durchsuchen Sie Google, um mehr über selbstausführende anonyme Funktionen in Javascript zu erfahren. Sie sollten Tonnen von Informationen und Beispielen finden.

+0

Dank! Es half. –

+0

@KimmofromJyvaskyla Wenn es Ihnen dann geholfen hat, dann können Sie es als eine gültige Antwort akzeptieren? – Tahir

0

Sie können versuchen, etwas wie ein submitButton anstelle einer Schaltfläche, , wenn Sie andere submitButton eine Bedingung einfügen, die zum Beispiel 0 ist, wenn Sie die erste Schaltfläche und 1 verwenden, wenn Sie die zweite und dann Ihre Funktion verwenden in der Steuerung und Prüfung, startet das erste submit die Funktion, die zweite submit macht etwas anderes. Ich weiß, das ist nicht der beste Weg, aber es ist der einzige Weg, wie ich mir das vorstelle.

Oder Sie ajaxSubmitButton verwenden:

AjaxSubmitButton::begin([ 
    'label' => 'Check', 
    'ajaxOptions' => [ 
     'type' => 'POST', 
     'url' => 'country/getinfo', 
     /*'cache' => false,*/ 
     'success' => new \yii\web\JsExpression('function(html){ 
      $("#output").html(html); 
     }'), 
    ], 
    'options' => [ 
     'class' => 'customclass', 
     'type' => 'submit' 
    ] 
]);