web-dev-qa-db-ja.com

Yii2ボタンonclick匿名関数

私は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を検索してください。あなたはたくさんの情報と例を見つけるはずです。

9
Tahir

ボタンの代わりに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'
    ]
]);
0
r98inver