关于updatepanel回传之后JS失效问题!!!!!!!!!!!!!!!!!!!

KeenWon 2011-08-14 06:04:21
我找了写资料,貌似是应为UpdatePanel来回往返不会保留 Javascript 或其他客户端技术(如 Adobe Flash)生成的任何效果。
我也找到了解决办法:
http://msdn.microsoft.com/zh-cn/library/bb311028.aspx
http://hi.baidu.com/a_longge2009/blog/item/9956cb23ca971ea94723e849.html
其实就是用Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(BeginRequestHandler);
但是我试了,貌似不行啊....是不是我的JS有问题???我对JS不大懂,请大家帮帮忙!!

function lr(overHide, scrollUl, leftBtn, rightBtn, num) {
var doc = document,
overHide = doc.getElementById(overHide),
scrollUl = doc.getElementById(scrollUl),
liArr = scrollUl.getElementsByTagName('li'),
len = liArr.length,
leftBtn = doc.getElementById(leftBtn),
rightBtn = doc.getElementById(rightBtn),
overWidth = overHide.offsetWidth;
scrollUl.style.width = len * num + 'px';
var inWidth = scrollUl.offsetWidth;
function checkBtn(overHide, scrollUl, leftBtn, rightBtn) {//判断左右按钮显示与隐藏
if (overWidth >= inWidth) {//内容不够不需要左右按钮
leftBtn.style.visibility = 'hidden';
rightBtn.style.visibility = 'hidden';
} else if (overHide.scrollLeft == 0) {//右显示左隐藏
leftBtn.style.visibility = 'hidden';
rightBtn.style.visibility = 'visible';
} else if ((overHide.scrollLeft + overWidth) == inWidth) {//左显示右隐藏
leftBtn.style.visibility = 'visible';
rightBtn.style.visibility = 'hidden';
} else if ((overHide.scrollLeft + overWidth) < inWidth && overHide.scrollLeft > 0) {//左右均显示
leftBtn.style.visibility = 'visible';
rightBtn.style.visibility = 'visible';
}

}
checkBtn(overHide, scrollUl, leftBtn, rightBtn);
function stepL(obj, step) {
var n = 0;
function scrollL(obj, step) {
if (n < step) {
obj.scrollLeft += 5;
n += 5;
} else {
clearTimeout(comeon)
}
checkBtn(overHide, scrollUl, leftBtn, rightBtn)
var comeon = setTimeout(function () { scrollL(obj, step) }, 20);
}
scrollL(obj, step);
}
function stepR(obj, step) {
var n = step;
function scrollR(obj, step) {
if (n > 0) {
obj.scrollLeft -= 5;
n -= 5;
} else {
clearTimeout(comeon)
}
checkBtn(overHide, scrollUl, leftBtn, rightBtn)
var comeon = setTimeout(function () { scrollR(obj, step) }, 20);
}
scrollR(obj, step);
}
leftBtn.onclick = function () {
stepR(overHide, num)
}
rightBtn.onclick = function () {
stepL(overHide, num)
}
}
lr('scroll_cont', 'scroll_ul', 's_L', 's_R', 122);
...全文
306 点赞 收藏 9
写回复
9 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
Ellis_wong 2012-05-05
你好,这个问题重新绑定是什么呢~整个js文件内的js方法都重新绑还是单独绑
[Quote=引用 7 楼 的回复:]

ASP.NET中UpdatePanel内控件的JS失效的问题

问题:大概意思如下:

<UpdatePanel>
<ContentTemplate>
<asp:TextBox ID="aaa"/>
</ContentTemplate>
</UpdatePanel>

<script>
$(document).ready(function()……
[/Quote]
回复
woshishen979 2012-02-16
遇到了同样的问题,楼主能否说下怎么解决的
回复
随智阔 2012-02-06
ASP.NET中UpdatePanel内控件的JS失效的问题

问题:大概意思如下:

<UpdatePanel>
<ContentTemplate>
<asp:TextBox ID="aaa"/>
</ContentTemplate>
</UpdatePanel>

<script>
$(document).ready(function(){
var id = "<%= aaa.ClientID%>";
$("#"+id).click(function(){
alert("aaa");
});
});
</script>

第一次点击TextBox是能弹出对话框,但是经过刷新之后点击就失效了。请问怎么解决?

回答:
因为Updatapanel没有postback,你的js不会重新加载。所以失效。你在你的页面加一段这样的代码就可以了:
<script type="text/javascript" language="javascript">
var prm = Sys.WebForms.PageRequestManager.getInstance();
prm.add_endRequest(function () {
// re-bind your jquery events here

$(document).ready(function(){
var id = "<%= aaa.ClientID%>";
$("#"+id).click(function(){
alert("aaa");
});
});
}

);
</script>

原文:http://zhidao.baidu.com/question/250731985.html



UpdatePanel 中js失效问题2010-06-21 18:02UpdatePanel来回往返不会保留 Javascript 或其他客户端技术(如 Adobe Flash)生成的任何效果。

因此在局部刷新之后要重新注册js

做法:

function EndRequestHandler()
{
//刷新之后要运行的js
}
function reload()
{
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);
}
在jquery的ready()中
$(documnet).ready(
function()
{
reload();
}
)

原文:http://hi.baidu.com/a_longge2009/blog/item/9956cb23ca971ea94723e849.html

回复
孟子E章 2011-08-14
你需要
ScriptManager.RegisterStartupScript(UpdatePanel1, UpdatePanel1.GetType(), "", "MoveLayer();", true);
这种格式进行注册客户端的函数
回复
KeenWon 2011-08-14
[Quote=引用 4 楼 wxr0323 的回复:]

<script type="text/javascript" language="javascript">
Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(BeginRequestHandler);
Sys.WebForms.PageRequestMa……
[/Quote]
测试了,不行啊...改成jquery ajax工作量太大了,如果那样我宁愿不用ajax了

我怀疑是不是js代码有什么问题
这样不行

Sys.WebForms.PageRequestManager.getInstance().add_endRequest(lr);
回复
子夜__ 2011-08-14
<script type="text/javascript" language="javascript">
Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(BeginRequestHandler);
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);
function BeginRequestHandler(sender, args)
{
var elem = args.get_postBackElement();
ActivateAlertDiv('visible', 'AlertDiv', elem.value + ' processing...');
}
function EndRequestHandler(sender, args)
{
ActivateAlertDiv('hidden', 'AlertDiv', '');
}
function ActivateAlertDiv(visstring, elem, msg)
{
var adiv = $get(elem);
adiv.style.visibility = visstring;
adiv.innerHTML = msg;
}
</script>
MSDN的方法试了没?
完全可以用jquery ajax
回复
KeenWon 2011-08-14
[Quote=引用 2 楼 dongxinxi 的回复:]

JS失效可能是由于Ajax异步更新Html导致某些元素找不到
[/Quote]
那有什么办法?
回复
JS失效可能是由于Ajax异步更新Html导致某些元素找不到
回复
KeenWon 2011-08-14
up!
回复
相关推荐
发帖
.NET技术社区
创建于2007-09-28

5.8w+

社区成员

.NET技术交流专区
申请成为版主
帖子事件
创建了帖子
2011-08-14 06:04
社区公告
暂无公告