2015-01-13 105 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' 
    ] 
]);