javascript - 当表单包含未保存的数据时警告用户,忽略数据表过滤字段

标签 javascript jquery primefaces jquery-selectors

我正在寻找一种方法来警告用户表单内有未保存的数据。 如果用户导航到另一个站点或关闭浏览器,则应该出现警告。 我发现this solution哪种作品。有时,如果浏览器关闭,它不会使用react。

<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<script>
    $(document).ready(function() {
        // Set the unload message whenever any input element get changed.
        $(':input').change(function() {
            setConfirmUnload(true);
        });

        // Turn off the unload message whenever a form get submitted properly.
        $('form').submit(function() {
            setConfirmUnload(false);
        });
    });

    function setConfirmUnload(on) {
        var message = "You have unsaved data. Are you sure to leave the page?";
        window.onbeforeunload = (on) ? function() { return message; } : null;
    }
</script>

现在我有一个问题。 我有一个<p:datatable>在我的页面上。每列都有一个过滤字段。由于该字段也是输入字段,因此如果过滤器字段中有某些内容,选择器也会匹配。 是否可以避免选择器检查过滤器字段。

最佳答案

您要查找的选择器是 :input:not(.ui-column-filter) (数据表过滤器输入具有 ui-column-filter 类) 。您可以简单地在浏览器中检查这些字段并查看设置了哪些类。在 Chrome 中,右键单击字段并选择“检查”。

所以改变这一行:

$(':input').change(function() {

至:

$(':input:not(.ui-column-filter)').change(function() {

您可以在 JavaScript 控制台中测试这两个选择器并查看差异。

另请参阅:

此外,您应该消除加载 jQuery 的脚本。 jQuery 与 PrimeFaces 捆绑在一起,并在您在页面上使用 PrimeFaces 组件时加载。 Multiple instances of jQuery will cause uncaught type errors .

关于javascript - 当表单包含未保存的数据时警告用户,忽略数据表过滤字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40999072/

相关文章:

css - 根据属性数据库 jsf2 primefaces 更改外观数据表

java - JSF2 : add ui:include to binding object's children

javascript - JSDoc 覆盖继承类方法的返回类型

javascript - 使用 passport.js、sails.js 和 sails 生成身份验证保护页面

validator.format 的 jQuery 验证错误

javascript - 根据 div 内的文本更改 div 背景颜色

jquery - 禁用 DatePicker TextBox 中的自由文本 - 但允许删除

html - PrimeFaces 禁用输入不透明度

Javascript获取Jquery datepicker值并转换为整数进行计算

JavaScript 文本转换