yii2按钮单击事件在数据确认消息之前

时间:2017-09-08 19:46:17

标签: button yii2 click confirm

我在datagrids中使用了数据确认属性和Html :: a标签并且它有效。但是现在我想用这样的按钮来使用它:

    <?php echo Html::button("<span class='icon delete'></span>", [
        "class" => "delete",
        "title" => Yii::t("app-upload-list", "delete"),
        "data-confirm" => Yii::t("yii", "Are you sure you want to delete this item?"),
    ])

我不在这里使用锚点,因为这个按钮在服务器端没有任何作用。 但是当我将单击事件附加到按钮时,它会在确认框之前。我可以通过在click事件中自己编写确认代码并使用data-my-confirm(左右)属性来防止双重确认框来绕过它,但它不是那么好。我可以用数据确认吗?

3 个答案:

答案 0 :(得分:1)

我有同样的问题。这是Yii的监听器(yii.js,第486行):

// handle data-confirm and data-method for clickable and changeable elements
$(document).on('click.yii', pub.clickableSelector, handler)
    .on('change.yii', pub.changeableSelector, handler);

它使用Event Delegation

  

事件委托允许我们将单个事件侦听器附加到   父元素,它将为所有与a匹配的后代触发   选择器,无论这些后代现在存在还是被添加到   未来。

在这种情况下,侦听器将附加到文档节点,该节点正在侦听单击元素中冒出的点击。放置在可单击元素上的监听器本身或文档节点的子元素中的任何监听器将在文档节点上的监听器之前(即Yii的监听器之前)触发。

要确保Yii的监听器在您的监听器之前触发,您必须像Yii一样将监听器附加到文档节点;同一节点上的侦听器按其注册顺序被调用。

$(document).on('click', '.delete', yourHandlerFunction);

注意:当您需要一个侦听器来添加添加侦听器或侦听单个节点(而不是多个节点)时不一定存在的元素时,将使用事件委托。通常建议使用添加侦听器时已存在的最接近的父元素,并在需要时继续存在。我不建议在没有充分理由的情况下将侦听器放在文档节点上。

答案 1 :(得分:0)

我认为您可以在View的Yii2模板中找到类似的示例。

在我看来,我有以下代码:

 <?= Html::a('Delete', ['delete'], [
            'class' => 'btn btn-danger',
            'data' => [
                'confirm' => 'Are you sure you want to delete this item?',
                'method' => 'post',
            ],
        ]) ?>

我必须承认我没有尝试将它与Html :: button一起使用。但你可以尝试这样的事情:

 <?php echo Html::button("<span class='icon delete'></span>", [
        "class" => "delete",
        "title" => Yii::t("app-upload-list", "delete"),
        "data" => [
                    'confirm' => 'Are you sure you want to delete this item?',
                    'method' => 'post',
                ],
    ]) ?>

编辑: 是的,这种方式不起作用。

建议使用链接(Html :: a)并根据需要设置样式。 如果您想提交表格,您应该使用:Html :: submitButton()

如果你想使用一个按钮...你可以使用stu工作,正如Stu在这里提到的那样:https://stackoverflow.com/a/12697511/2437857

答案 2 :(得分:0)

即使是一个老问题,我也想贡献我的知识。

如果您想使用html::button()而不是html::a()

这是一个例子

 <?php echo Html::button("<span class='icon delete'></span>", [
    "class" => "delete",
    "title" => Yii::t("app-upload-list", "delete"),
    "onclick" => 'if(confirm("Are you sure you want to delete this item?")){
                     return true;
                    }else{
                     return false;
                    }',
]) ?>

我确定它应该可以工作。