更改事件后的Javascript回调具有部分页面刷新

更改事件后的Javascript回调具有部分页面刷新,javascript,Javascript,我使用的是一个web框架,它使用部分页面呈现来使用输入字段的更改事件刷新屏幕的一部分。我无权访问更改事件的函数,但我可以插入jquery为该字段添加我自己的更改事件。不幸的是,该字段也在部分页面呈现中刷新 我正在尝试注入自己的代码,为页面的这一部分添加一些样式。不幸的是,$(document.ready只在开始时触发一次,因此当发生部分页面刷新时,我的代码会丢失 如果我使用$(document).change或直接附加到输入字段的更改事件,我的代码在框架更改和部分页面刷新之前触发,因此也会丢失

我使用的是一个web框架,它使用部分页面呈现来使用输入字段的更改事件刷新屏幕的一部分。我无权访问更改事件的函数,但我可以插入jquery为该字段添加我自己的更改事件。不幸的是,该字段也在部分页面呈现中刷新

我正在尝试注入自己的代码,为页面的这一部分添加一些样式。不幸的是,
$(document.ready
只在开始时触发一次,因此当发生部分页面刷新时,我的代码会丢失

如果我使用
$(document).change
或直接附加到输入字段的更改事件,我的代码在框架更改和部分页面刷新之前触发,因此也会丢失

因此,我唯一能做的就是等待3秒钟,然后再次应用我的代码。然而,这是非常丑陋的,在速度较慢的机器上,有时需要3秒钟以上

是否有任何方法可以将回调附加到部分页面刷新后激发的更改事件

该框架使用非常旧的web标准(表布局),并且在许多更改函数上趋向于返回false。不确定这是否会阻止任何进一步的传播,也就是说阻止我的回调

这是输入元素:

<input id="N24:MiscRt1:0" title="Miscellaneous Rate 1" class="xa" onchange="_uixspu('DefaultFormName',1,'DynCalcUpd','MiscRt1',0,1,{'_FORM_SUBMIT_BUTTON':'_fwkActBtnName_MiscRt1_DynCalcUpdYAS-AIio','evtSrcRowId':'AllocationsAM.AllocationsPlanVO321831001-132183-321838243CWBASG8243CWBPERFAPPRAISALOSCgK_CA','DynCalcUpdCol':'Misc1ValUGoCYJgF','evtSrcRowIdx':'06cW78OeE'});return true;" name="N24:MiscRt1:0" size="10" type="text" value="0.00" maxlength="38">
回调还必须先等待另一个change函数和部分页面刷新完成

$(document).change(function() {
    window.setTimeout(xxcwb_func,0);
});
这将把它推送到浏览器待办事项列表(第二个参数中指定了截止日期),在部分页面刷新后,它将开始执行该操作。

试试看

setInterval(function{
  /* check if the element is already "evented" */
  if (!$("#myelement").data("alreadyEvented")) {
    /* set the flag that it is ok now: element is evented */
    $("#myelement").data("alreadyEvented","true");
    $("#myelement").click(function{ /* or another event */
      /* your event */
    });
  }
},50);
它简单、愚蠢,应该可以工作:)


部分刷新后,属性也将被删除->事件将再次分配

请添加您尝试过的代码如果您指的是部分刷新的ajax,您可以在成功回调中执行操作。尝试将“0”更改为更大的数字(延迟毫秒)。如果足够大的话,应该可以用。我通常也使用20、50、100等。Onchage是仅用于表单事件的输入。
setInterval(function{
  /* check if the element is already "evented" */
  if (!$("#myelement").data("alreadyEvented")) {
    /* set the flag that it is ok now: element is evented */
    $("#myelement").data("alreadyEvented","true");
    $("#myelement").click(function{ /* or another event */
      /* your event */
    });
  }
},50);