PDA

View Full Version : حرفه ای: تغییر متغیرهای جاوااسکریپت پس از postback



ali.n93
یک شنبه 03 فروردین 1393, 13:36 عصر
با سلام
یه مشکل عجیب پیدا کردم که کاملا گیج شدم و با trace خط به خط هم متوجه نمیشم دلیلش چیه! من یه متغیر جاوااسکریپت به نام row دارم (متغیر public) که وقتی روی هر سطر از یک table کلیک میشه متغیر row برابر با اون سطر میشه. به طور مختصر این میشه کدش:

function f1(a)
{
row=a;
}



<table>
<tr onclick="f1(this)">
<td>ستون یک</td>
<td>ستون دو</td>
<td>ستون سه</td>
</tr>
<tr onclick="f1(this)">
.
.
.
.
</tr>
</table>


قبل از اینکه پست بک انجام بشه متغیر row به درستی همه چیز رو داخل خودش نگه میداره و ویژگی innerHTML اون هم همه ی تگ های td رو داخل خودش داره. اما بعد از پست بک ویژگی innerHTML و innerText یک رشته ی خالی میشه اما بعضی از ویژگی های دیگه مثل style یا class هیچ تغییری نمیکنه.
میخوام بدونم چرا بعد از پست بک این اتفاق میفته؟!!!
توی پست بک شدن صفحه هم هیچ تغییری در <table> ایجاد نمیکنم و فقط یک hiddenfield رو که داخل یه UpdatePanel قرار داره رو تغییر میدم که هیچ ربطی هم به اون <table> نداره:اشتباه:
لطفا کمکم کنید :گریه:

anotheruser
یک شنبه 03 فروردین 1393, 14:23 عصر
با سلام
یه مشکل عجیب پیدا کردم که کاملا گیج شدم و با trace خط به خط هم متوجه نمیشم دلیلش چیه! من یه متغیر جاوااسکریپت به نام row دارم (متغیر public) که وقتی روی هر سطر از یک table کلیک میشه متغیر row برابر با اون سطر میشه. به طور مختصر این میشه کدش:

function f1(a)
{
row=a;
}



<table>
<tr onclick="f1(this)">
<td>ستون یک</td>
<td>ستون دو</td>
<td>ستون سه</td>
</tr>
<tr onclick="f1(this)">
.
.
.
.
</tr>
</table>


قبل از اینکه پست بک انجام بشه متغیر row به درستی همه چیز رو داخل خودش نگه میداره و ویژگی innerHTML اون هم همه ی تگ های td رو داخل خودش داره. اما بعد از پست بک ویژگی innerHTML و innerText یک رشته ی خالی میشه اما بعضی از ویژگی های دیگه مثل style یا class هیچ تغییری نمیکنه.
میخوام بدونم چرا بعد از پست بک این اتفاق میفته؟!!!
توی پست بک شدن صفحه هم هیچ تغییری در <table> ایجاد نمیکنم و فقط یک hiddenfield رو که داخل یه UpdatePanel قرار داره رو تغییر میدم که هیچ ربطی هم به اون <table> نداره:اشتباه:
لطفا کمکم کنید :گریه:

سلام ، آیا محتوای Table شما Dynamic هست؟

ali.n93
یک شنبه 03 فروردین 1393, 15:05 عصر
از گریدویو استفاده میکنم اما بعد از page_load هیچ وقت تغییری نمیکنه. در ضمن حتی اگه تغییر بکنه row یک متغیر مستقل هستش نه یک اشاره گر

ali.n93
یک شنبه 03 فروردین 1393, 17:56 عصر
جواب مشکلم رو بالاخره فهمیدم. اولین اشتباهم این بود که فکر میکردم متغیر row یک متغیر مستقل بود درصورتی که row مثل اشاره گر عمل میکرد. اشتباه دوم:گریدیو داخل یک آپدیت پنل قرار داشت و UpdateMode=always بود. وقتی که پست بک انجام میشد هیچ کاری با gridview نداشتم اما چون updatemode=always بود، آپدیت پنل هم دوباره از سرور لود میشد و مقدار متغیر row هم مثل یک اشاره گر عمل میکرد و خصوصیت innerHTML="" میشد.