我正在使用一个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();
});
回调还必须等待其他更改功能和部分页面刷新先完成。
答案 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;活动将再次分配