我必须在用户更改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中它是一样的。
答案 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是行不通的。