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

时间:2014-01-07 07:05:37

标签: javascript

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

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

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

所以我唯一能做的就是用回调等待3秒,然后再次应用我的代码。然而,这是非常丑陋的,在慢速机器上它有时需要超过3秒。

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

框架使用非常旧的Web标准(表格布局),并且在很多变更函数上也倾向于return 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">

这是我尝试过的代码:

function xxcwb_func() {
   $('span#CompTable table.x1n:nth-child(1) tbody tr td input').on('click', function(e) {
      e.stopPropagation();
   });
   $('span#CompTable table.x1n:nth-child(1) tbody tr td select').on('click', function(e) {
      e.stopPropagation();
   });
   $('span#CompTable table.x1n:nth-child(1) tbody tr td').on('click', function() {
      if ($(this).hasClass('xxcwb_highlight')) {
         $(this).parent().find('td').css('background', '#f2f2f5');
         $(this).parent().find('td').removeClass('xxcwb_highlight');
      }
      else {
         $(this).parent().parent().find('td').css('background', '#f2f2f5').removeClass('xxcwb_highlight');
         $(this).parent().find('td').css('background', '#97cbf6');
         $(this).parent().find('td').addClass("xxcwb_highlight");
      }
   });
   addSeparator('Current Salary');
   addSeparator('Proposed Increase Amount');
   addSeparator('PDD New Salary');
   addSeparator('Proposed Salary');
   addSeparator('LM New Salary');
   addSeparator('HR New Salary');
   addSeparator('CEO New Salary');
   addSeparator('Current Car Benefit');
   addSeparator('Current Total Cash');
}

$(document).ready(function() {
   // Run our code.
   xxcwb_func();
});

$(document).change(function() {
   xxcwb_func();
});

回调还必须等待其他更改功能和部分页面刷新先完成。

2 个答案:

答案 0 :(得分:1)

$(document).change(function() {
    window.setTimeout(xxcwb_func,0);
});

这将把它推送到浏览器TODO列表(在第二个参数中指定了截止日期),它将在部分页面刷新发生后进行处理。

答案 1 :(得分: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);

它简单,愚蠢,应该正常工作:)

部分刷新后,该属性也将被删除 - &gt;活动将再次分配