我试图从js创建一些新按钮,如:
var nextYearList ="";
...
nextYearList += "<button type='button' customparam='" + newCatalogList[l].code + "|" + newBaseName + "' ><span class='catName'>" + newCatalogList[l].name + "</span><span class='catYears'>" + newCatalogList[l].startDate + " - " + newCatalogList[l].endDate + "</span></button>";
...
ok('#YearNavigation .panelNextYear')[0].innerHTML = nextYearList;
var xListYears = ok('.panelNextYear button[customparam]');
for (var f = 0; f < xListYears.length; f++)
{
xListYears[f].addEventListener('click', changeCatalogPostback(xListYears[f].getAttribute('customparam'),true));
}
如果ok是我的document.querySelectorAll包装器;
ok = function (model)
{
return document.querySelectorAll(model);
};
changeCatalogPostback= function (parameter,checker)
{
if(checker)
__doPostBack('changeCatalog',parameter);
};
主要问题是我的__doPostBack是在html渲染时触发的...所以再见当前页...
那么如何从javascript中避免html渲染上的__doPostBack触发器呢?我真的需要它在那里,但工作点击而不是渲染...
答案 0 :(得分:1)
当您添加事件侦听器时,您实际上正在调用返回undefined
的函数并进行回发。因此,如果您要从__doPostBack
功能中移除changeCatalogPostback
来电,那么addEventListener
来电的话会评估到最后并且将等于:
xListYears[f].addEventListener('click', undefined);
而addEventListener
应该接受function
作为第二个参数。使用bind
电话:
xListYears[f].addEventListener(
'click',
changeCatalogPostback.bind(this, xListYears[f].getAttribute('customparam'), true));