2015-01-13 135 views
5

我是Yii2的新手,我正在努力通過按下Yii2按鈕來觸發匿名功能。 下面是6個樣本,其中前兩個是OK的。 但這不完全是我想要的。 我想知道如何獲得一個匿名函數,例如「按鈕3」和「按鈕5」。我測試瞭如何通過Controller進行函數調用,並且工作正常,但這不是我想要的。我將不勝感激您的幫助 - 謝謝!Yii2按鈕點擊匿名功能

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

回答

8

您可以將自己執行的匿名函數()()包裝爲匿名函數。

所以你的第二個例子看起來像這樣。

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

搜索Google,瞭解更多關於Javascript中自我執行的匿名函數的信息。你應該找到大量的信息和例子。

+0

謝謝!它有幫助。 –

+0

@KimmofromJyvaskyla如果它幫助你,那麼你可能會接受它作爲一個有效的答案? – Tahir

0

您可以嘗試使用submitButton而不是按鈕, 如果您有其他submitButton插入條件,例如使用第一個按鈕時爲0,使用第二個時爲1,然後將您的函數在控制器中檢查,第一次提交啓動功能,第二次提交做其他事情。我知道這不是最好的方式,但這是我想象的唯一方式。

或者,你可以使用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' 
    ] 
]);