YII2和javascript事件" window.onbeforeunload"

时间:2017-10-11 23:12:08

标签: javascript php yii2

我必须在用户更改YII2应用程序页面之前提醒用户(我需要执行一些其他代码而不是他们离开)但我通常在简单的html / php页面上使用的javascript代码,在YII2中不起作用。

这是在视图下的create.php中的代码:

$noback = <<< JS
window.onbeforeunload = closing;
var closing = function () {
        console.log("Message");
        window.alert("If you exit this page you will lose your data!");
        // other actions
}
JS;
$this->registerJs($noback, View::POS_READY);

如果我把代码放在_form.php中它是一样的。

1 个答案:

答案 0 :(得分:0)

onbeforeunload处理程序中的可能性有很多限制。请参阅MDN: onbeforeunload event handler

在大多数现代浏览器中,您无法从beforeunload处理程序生成警报。您也无法在beforeunload处理程序中自定义消息。

在基本级别,您应该在将closing分配给window.onbeforeunload之前定义closing。这里可以提升变量,但不是定义。我建议将window.onbeforeunload = closing; function closing() { console.log("Message"); return "If you exit this page you will lose your data!"; } // OR window.onbeforeunload = function() { console.log("Message"); return "If you exit this page you will lose your data!"; } 更改为函数声明,或者在赋值操作中定义它。

CREATE EXTERNAL TABLE IF NOT EXISTS `nwdb.strings` (`string_id` INT, `string_data` STRING, PRIMARY KEY(string_id) DISABLE NOVALIDATE) ROW FORMAT DELIMITED FIELDS TERMINATED BY "," LINES TERMINATED BY "\n" STORED AS TEXTFILE LOCATION "/data/nwdb/";

你可以在这里执行其他代码,但一般来说,试图模仿或欺骗浏览器生成的UI是行不通的。