基于用户交互在页面焦点上调用Javascript函数

基于用户交互在页面焦点上调用Javascript函数,javascript,jquery,ajax,Javascript,Jquery,Ajax,我有一个要求,点击图标应该会打开一个新窗口,用户将能够查看和编辑某些字段。用户关闭此窗口并返回父窗口后,图标颜色和文本应更改(例如:-如果用户删除了某些数据,图标将更改为红色,文本设置为null。如果用户按下“取消”按钮,则不会更改任何内容) 我计划使用body onload函数来实现这一点,该函数基本上使用AJAX请求检查数据库,查看用户是否更改了数据,然后相应地更改图标和文本 但是,我发现这种方法存在两个问题 1.即使用户没有更改任何内容,也会有AJAX调用(即按下取消按钮) 2.每次主体聚

我有一个要求,点击图标应该会打开一个新窗口,用户将能够查看和编辑某些字段。用户关闭此窗口并返回父窗口后,图标颜色和文本应更改(例如:-如果用户删除了某些数据,图标将更改为红色,文本设置为null。如果用户按下“取消”按钮,则不会更改任何内容)

我计划使用body onload函数来实现这一点,该函数基本上使用AJAX请求检查数据库,查看用户是否更改了数据,然后相应地更改图标和文本

但是,我发现这种方法存在两个问题
1.即使用户没有更改任何内容,也会有AJAX调用(即按下取消按钮)
2.每次主体聚焦时都会调用AJAX。例如:-他可能正在处理其他页面(或完全不同的浏览器),然后返回到这个页面,导致AJAX调用

有人能提出更好的办法吗。
我正在使用JavaScript、JSP和Java,我认为最简单的方法是设置一个cookie(了解如何)。然后,您可以让两个窗口相互通信。这不是AJAX,但它很可能会工作。

另一种创建类似弹出框的好方法是使用模式框。这些可能很复杂,但它们看起来很漂亮。您必须在中创建jQuery插件,但您可以使用该插件并了解其工作原理。祝您的需求好运。

实现这一点的两种方法

方法1

您知道在打开的表单中更改数据库的方法。假设您有一个delete方法,在该方法之后再编写一个
window.opener.location.reload()
。缺点是每次更改子窗口中的某些内容时,都会重新加载opener(父窗口)。这是不必要的

方法2-使用cookies

我正在使用MDN创建cookies。行动计划将是这样的。在子窗口中更改任何内容并在数据库中按如下方式更新后,创建cookie并按如下方式为其设置值
docCookies.setItem(“IsChildForMuUpdate”,“yes”)。您可以对所做的每一个操作使用相同的cookie。现在,当您导航回父窗体时,请执行此操作

$(document).ready() {
    $(window).focus(function () {
        var formCookie = docCookies.getItem("isChildFormUpdated");
        if (formCookie !== null && formCookie == "yes") {
            //resetting the cookie. you can also remove the cookie
            docCookies.setItem("isChildFormUpdated", "no");
            //docCookies.removeItem("isChildFormUpdated");
            // your ajax call comes here
            //or you could simply reload the form so that we get fresh data
            //window.location.reload(); // it will be heavier
        }
    });
});

我希望您了解基本的想法。

通过调用
window.top.functionName(data)等函数,您可以非常轻松地将数据发送到父窗口但我如何使用它?仅供参考,我正在使用IE 8,我正在像这样打开新窗口-
window.open(url,‘提示’,“resizable=yes,scrollbars=yes,width=450,height=275”)
我也尝试了
window.parent.functionname
。它没有调用父函数。首先更新您的浏览器,谁使用IE8?客户端请求:P我无能为力。@naveen早些时候我有一个回答没有正确回答问题,这就是为什么我编辑了它,为什么它很可能被否决。