【问题标题】:Pass json through click event to jQuery function通过点击事件将json传递给jQuery函数
【发布时间】:2014-04-04 21:01:48
【问题描述】:

我有一个旧的“封闭”系统,它在自己的容器中运行 IE,这意味着在许多情况下我必须像穴居人一样编写代码,因为我不能使用任何浏览器开发工具/控制台对对象进行 X 光检查从远程系统返回。

现在,我正在查看的特定函数是来自第三方的回调(它变得很复杂),它返回我愿意打赌的是标准 JSON 对象。

function core_OnUeDeltaItemsUpdate(dataType, oData)
{
    if (dataType == "Units")
    {
        // Bail if dispatch report xml hasn't been loaded yet.
        if (oXml == null)
            return;

        ..... does lots of stuff

        // Reload the content in case any of our displayed units changed
        processUeDelta.click();
    }
}

... at the bottom of the page

<button style="display:none;" type="button" id="processUeDelta"/>

以及我希望使用 jQuery 的附加 javascript 文件

$(function(){
    $("#processUeDelta").click(function(){
        var i = 0;
        alert(this.ueDelta);
        for(var propertyName in this.ueDelta)
        {
            i++;
            alert("property " + i + ": " + oData[propertyName]);
        }
    });
});

现在,当前将自身绑定到隐藏按钮的最后一个函数无法解析 oData。我在这里被困在两件事上。

  1. 我不确定如何将 oData 对象传递给附加的事件处理程序
  2. 我不太喜欢这种设计,也许还有另一种方法可以取出中间按钮,这样我就可以处理 JSON 数据对象 oData。

注意事项:

  • 这是基于数据泵的,所以这个回调函数平均被调用 5 秒。
  • 我仅限于使用 jQuery 1.7.1
  • 我看不到该对象,我的浏览器无法充当测试工具,移动部件太多,我无法从应用程序外部对其进行测试。

【问题讨论】:

  • 你不能编辑core_OnUeDeltaItemsUpdate函数吗?
  • @NaNpx 那是我玩的地方。如果你能看到我没有看到的方法,请赐教
  • 如果可以更新core_OnUeDeltaItemsUpdate,那为什么要触发隐藏按钮上的事件来传递数据呢?您可以在您的 jQuery 文件中创建一个函数并从 core_OnUeDeltaItemsUpdate 调用它,并将 oData 作为参数传入。
  • @NaNpx 我不确定我理解你的意思。我对 core_OnUeDeltaItemsUpdate 的问题是它位于 webapp 的不同部分(字面意思是在堆栈上,更靠近根目录)。所以它是订阅它的许多其他函数的基本回调函数。因此,我不能纯粹出于我的目的直接编辑它。

标签: javascript jquery json jquery-1.7


【解决方案1】:

您可以将core_OnUeDeltaItemsUpdate 函数替换为您自己的函数,然后调用原来的core_OnUeDeltaItemsUpdate 函数。在你的 jQuery 文件中做这样的事情

$(document).ready(function(){
    window._core_OnUeDeltaItemsUpdate = core_OnUeDeltaItemsUpdate;

    window.core_OnUeDeltaItemsUpdate = function(dataType, oData){

        // pass the parameters into the original function
        _core_OnUeDeltaItemsUpdate(dataType, oData);

        // do whatever you need to do with oData
        var i = 0;
        alert(this.ueDelta);
        for(var propertyName in this.ueDelta)
        {
            i++;
            alert("property " + i + ": " + oData[propertyName]);
        }
    }
});

【讨论】:

    猜你喜欢
    • 2021-03-06
    • 2019-01-03
    • 1970-01-01
    • 2012-09-04
    • 2011-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多