私はYii2を初めて使用し、Yii2ボタンを押して匿名関数をトリガーするのに苦労しています。以下は6つのサンプルで、最初の2つは問題ありません。しかし、それは私が望んでいることではありません。 「ボタン3」や「ボタン5」の場合のように、匿名関数を機能させる方法を知りたいのですが。私はコントローラーを介して関数呼び出しを行う方法をテストしました、そしてそれはうまくいきます、しかしそれは私が望むものではありません。私はあなたの助けに感謝します-ありがとう!
// 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();
匿名関数を自己実行型の匿名関数でラップできます()()
。
したがって、2番目の例は次のようになります。
echo Html::button('Button 3', [ 'class' => 'btn btn-primary', 'onclick' => '(function ( $event ) { alert("Button 3 clicked"); })();' ]);
Javascriptでの自己実行無名関数の詳細については、Googleを検索してください。あなたはたくさんの情報と例を見つけるはずです。
ボタンの代わりにsubmitButtonを使用するようなことを試すことができます。他のsubmitButtonに条件を挿入する場合、たとえば、最初のボタンを使用する場合は0、2番目のボタンを使用する場合は1を挿入し、関数をコントローラーに配置してチェックします。 、最初の送信は関数を起動し、2番目の送信は何か別のものを作成します。私はそれが最善の方法ではないことを知っていますが、それは私がそれをすることを想像する唯一の方法です。
または、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'
]
]);