2015-01-13 14 views
5

Jestem nowy w Yii2 i staram się uruchomić anonimową funkcję, naciskając przycisk Yii2. Poniżej 6 próbek, z których pierwsze dwa są w porządku. Ale nie jest to dokładnie to, co chcę mieć. Chciałbym wiedzieć, jak mogę uzyskać działającą funkcję anonimową, na przykład "Przycisk 3" i "Przycisk 5". Testowałem, jak wykonać wywołanie funkcji za pomocą kontrolera, i to działa dobrze, ale to nie jest to, czego chcę. Byłbym wdzięczny za Twoją pomoc - dziękuję!Przycisk Yii2 onclick anonymous function

// 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(); 

Odpowiedz

8

Można owinąć anonimową funkcję samodzielnego wykonywania w anonimowej funkcji ()().

Twój drugi przykład będzie wyglądał mniej więcej tak.

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

Wyszukaj w Google, aby dowiedzieć się więcej o samodzielnym wykonywaniu anonimowych funkcji w JavaScript. Powinieneś znaleźć mnóstwo informacji i przykładów.

+0

Dzięki! Pomogło. –

+0

@KimmofromJyvaskyla Jeśli to pomogło, to czy możesz go zaakceptować jako prawidłową odpowiedź? – Tahir

0

Można spróbować czegoś jak przy użyciu submitButton zamiast przycisku jeśli masz inne submitButton wstawić warunek, który jest na przykład 0 podczas korzystania pierwszy przycisk i 1 podczas korzystania z drugą, a następnie umieścić swoją funkcję w kontrolerze i kontroli, pierwsze zgłoszenie uruchamia funkcję, drugie zgłoszenie robi coś innego. Wiem, że to nie jest najlepsza droga, ale jest to jedyny sposób, w jaki to sobie wyobrażam.

Albo można użyć ajaxSubmitButton:

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' 
    ] 
]);