我是Yii2的新手,我正在努力通过按Yii2按钮来触发匿名功能。 下面是6个样本,其中前两个是好的。 但这并不是我想要的。 我想知道如何让一个匿名函数工作,比如" Button 3"和"按钮5"。我测试了如何通过Controller进行函数调用,这样可以正常工作,但这不是我想要的。我将非常感谢你的帮助 - 谢谢!
// 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();
答案 0 :(得分:9)
您可以将匿名函数包装在自执行匿名函数()()
中。
所以你的第二个例子看起来像这样。
echo Html::button('Button 3', [ 'class' => 'btn btn-primary', 'onclick' => '(function ( $event ) { alert("Button 3 clicked"); })();' ]);
搜索Google以了解有关在Javascript中自行执行匿名函数的更多信息。你应该找到大量的信息和例子。
答案 1 :(得分: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'
]
]);