首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如果用户使用onbefoerunload导航,如何在jexcel单元格更改时发出警报

如果用户使用onbefoerunload导航,如何在jexcel单元格更改时发出警报
EN

Stack Overflow用户
提问于 2020-05-06 05:27:53
回答 2查看 672关注 0票数 0

我想显示jexcel单元格中所做更改的警报。

我有保存数据的保存按钮。现在,如果用户更改了任何单元格,则在导航到其他页面时,我希望使用onbeforeunload显示警报。

代码语言:javascript
运行
复制
var unsaved = false;

$(":input").change(function(){ //triggers change in all input fields including text type
    unsaved = true;
});

function unloadPage(){
    if(unsaved) {
        return "You have unsaved changes on this page. Do you want to leave this page and discard your changes or stay on this page?";
    }
}

window.onbeforeunload = unloadPage;

此代码只适用于输入类型。如何使它在jexcel单元格中工作。我使用jexcel v4

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-05-06 05:53:34

您可以将onchange事件侦听器附加到您的jexcel表中,这里有一个小提琴来演示如何在您的单元上侦听更改事件,这里还有作为代码段的代码(由于沙箱不允许运行特定代码,所以代码段将无法工作,如果您测试它,此代码段将在您的本地计算机上运行):

代码语言:javascript
运行
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<html>
<script src="//bossanova.uk/jexcel/v4/jexcel.js"></script>
<script src="//bossanova.uk/jsuites/v2/jsuites.js"></script>
<link rel="stylesheet" href="//bossanova.uk/jexcel/v4/jexcel.css" type="text/css" />
<link rel="stylesheet" href="//bossanova.uk/jsuites/v2/jsuites.css" type="text/css" />

<div id="spreadsheet"></div>
<div>
    <button onclick="$('#log').html('')">Clear</button><br>
    <p>Log:</p>
    <div id="log" style="background-color:#c7eaff; border-radius:2px; color:#000; padding:20px"></div>
</div>

<script>
var changed = function(instance, cell, x, y, value) {
    var cellName = jexcel.getColumnNameFromId([x,y]);
    $('#log').append('<p>New change on cell ' + cellName + ' to: ' + value + '</p>');
}

var data = [
    ['Mazda', 2001, 2000, '2006-01-01'],
    ['Pegeout', 2010, 5000, '2005-01-01'],
    ['Honda Fit', 2009, 3000, '2004-01-01'],
    ['Honda CRV', 2010, 6000, '2003-01-01'],
];

jexcel(document.getElementById('spreadsheet'), {
    data:data,
    rowResize:true,
    columnDrag:true,
    columns: [
        { type: 'text', width:'200' },
        { type: 'text', width:'100' },
        { type: 'text', width:'100' },
        { type: 'calendar', width:'100' },
    ],
    onchange: changed
});
</script>
</html>

因此,您只需在onchange事件侦听器中更改未保存的变量/标志,也可以从官方网站中获取此示例,该示例将事件侦听器列表附加到jexcel表中。

票数 1
EN

Stack Overflow用户

发布于 2020-05-08 14:53:28

JL.4是jexcel的一个依赖项,并且已经有一个插件可以实现这一点。

代码语言:javascript
运行
复制
<form id='myForm'>
<input type='hidden' name='data'>
<div id='spreadsheet'></div>
<input type='button' value='Save data' onclick='saveData(); myTracker.resetTracker()'>
</form>

<script>
var myTracker = jSuites.tracker(document.getElementById('myForm'));

jexcel(document.getElementById('spreadsheet'), {
    onafterchanges: function(el) {
        document.forms[0].name.value = el.jexcel.getData();
    }
}
</script>

因此,基本上您可以实现saveData来保存数据,并重新设置跟踪器,以便再次跟踪更改。

这里的另一个更改是,只有在设置了初始表内容之后才能启动formTracker。因此,如果用户打开一个表,不执行任何更改,并且保留不会发出警报,因为数据中没有任何更改。

来源:https://bossanova.uk/jsuites/tracking-for-form-changes

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61628003

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档