PDA

View Full Version : چرا این کد جاوا کار نمیکنه؟



ermia_
دوشنبه 20 تیر 1390, 16:16 عصر
سلام دوستان
من یه کدی دارم که با جاوا اسکریپت کار میکنه، یه صفحه تو ویژوال استودیو میسازم و یه imagebutton میذارم.
این کد جاوا اسکریپت عکس دکمه رو تغییر میده وقتی موس میره رو دکمه یا میره کنار.
این کدشه:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="with out master page.aspx.cs" Inherits="Default2" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<script language="JavaScript" type="text/JavaScript">
<!--
function MM_swapImgRestore() { //v3.0
var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_preloadImages() { //v3.0
var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_findObj(n, d) { //v4.01
var p,i,x; if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}
function obj1_onclick() {

}

//-->
</script>

<script language="javascript" type="text/javascript" for="obj1" event="onclick">
// <!CDATA[
return obj1_onclick()
// ]]>
</script>

</head>
<body>
<form id="form1" runat="server">
<div>
<td bgcolor="#999966" style="text-align: center">
with out master page<br />
&nbsp;<asp:ImageButton ID="ImageButton3" runat="server" ImageUrl="~/menu7.gif" onMouseOut="MM_swapImgRestore()"
onMouseOver="MM_swapImage('ImageButton3','','menu_7.gif',1)" AlternateText="onmouse"
ToolTip="onmouse" PostBackUrl="" meta:resourcekey="ImageButton3Resource1" />
</div>
</form>
</body>
</html>


کد درست کار میکنه و عکس رو تغییر میده.
حالا مشکلم اینه که تو مستر پیج این کد جاوا کار نمیکنه نمیدونم چرا
واقعا خیلی سرچ کردم اما متوجه نشدم چیکار باید بکنم، تو این انجمن هم یکی سوالی مثل سوال من پرسیده بود اما کسی بهش جواب نداده بود.

یه جا خوندم که نوشته شده بود یه راهش اینه که کد جاوا رو تو فایل js قرار بدید بعد تو مستر پیج صداش کنید.
اما متاسفانه نگفته بود چطوری
خیلی ممنون میشم ازتون اگر کمکم کنید که این مشکل رو حل کنم.

micro_bhk
دوشنبه 20 تیر 1390, 18:21 عصر
دوست عزیز
به نظرم مشکلت تو فرستادن ID اون ImageButton هستش.

زمانی که از Master و Content استفاده میکنیم، کنترل هایی که توی صفحه Content قرار میگیرن ID شون تغییر میکنه. اگه سورس کد صفحه خروجیتون رو ببینید کاملا متوجه منظورم میشید.

<asp:ImageButton ID="ImageButton3" runat="server" ImageUrl="~/menu7.gif" onMouseOut="MM_swapImgRestore()" onMouseOver="MM_swapImage('ImageButton3','','menu_ 7.gif',1)" AlternateText="onmouse"
ToolTip="onmouse" PostBackUrl="" meta:resourcekey="ImageButton3Resource1" />


اینجا ID کنترلتون ImageButton3 هست، زمانی که از Master اسنفاده نمیکنید، ID همینه و تغییر نمیکنه، ولی وقتی که از Master استفاده میکنید ID کنترل به ContentPlaceHolder1_ImageButton3 تغییر میکنه.

ContentPlaceHolder1 در واقع آی دی ContentPlaceHolder صفحه Master هست.

میتونید کارای زیر رو انجام بدید:

onMouseOver="MM_swapImage('ContentPlaceHolder1 _ImageButton3','','menu_ 7.gif',1)"

یا

onMouseOver="MM_swapImage('<%= ImageButton3.ClientID %>','','menu_ 7.gif',1)"


اگر در این زمینه سرچ کنید مطالب زیادی پیدا میکنید

موفق باشید

ermia_
سه شنبه 21 تیر 1390, 00:26 صبح
مرسی دوست خوبم برای پاسختون
خیلی خوب و واضح توضیح دادید
اما من ImageButton3 رو که تو ContentPlaceHolder ندارم، بیرون اون هست
یعنی من میخوام این دکمه تو مستر پیجم باشه که تو همه Content page ها نمایش داده بشه،خب وقتی تو مستر پیج میخواد قرار بگیره، دیگه داخل ContentPlaceHolder نیست که آی دیش عوض بشه دیگه؟
یعنی هم Imagebutton ام که قراره عکسش عوض بشه و هم اون کد جاوایی که باعث عوض شدن عکس میشه، هر دو میخوام تو صفحه MasterPage باشند
نمیدونم تونستم منظورمو برسونم

ermia_
سه شنبه 21 تیر 1390, 01:20 صبح
حل شد مشکلم
واقعه ممنونم ازتون
فقط اشتباهی که کردم، گفتید سورس رو نگاه کنم، من این کارو نکردم و از اسمهایی که شما گذاشتید استفاده میکردم
اسم اصلی ImageButton1 ام تو مستر پیج، ctl00_ImageButton1 بود

بازم ممنون

amirjalili
سه شنبه 21 تیر 1390, 12:05 عصر
این راه حل خوبه اما به شرطی که در جایی که داری آی دی میگیری نری ویو سورس کنی و آی دی رو ببینی .. این غلطه یا حداقل ابتدایی هستش.
باید از ClientId کنترل در getElementById استفاده کنی.
("<%=Button1.ClientID%>")

ermia_
سه شنبه 21 تیر 1390, 15:49 عصر
دوستان یه سوال
این اسم ctl00_ImageButton1 ممکنه تو کلاینت های مختلف عوض بشه؟ اگه برای افراد مختلف این اسم عوض بشه که پس کد برای همه درست کار نمیکنه و عکس رو عوض نمیکنه دیگه؟
چیکار باید کرد که به جای گذاشتن اسم مستقیم ctl00_ImageButton1تو تابع، بگیم هر اسمی که ClientID داشت رو بفرست به تابع؟
از

onMouseOver="MM_swapImage('ContentPlaceHolder1 _ImageButton3','','menu_ 7.gif',1)"


استفاده کردم اما جواب نداد.

ermia_
سه شنبه 21 تیر 1390, 15:56 عصر
بله منم همین فکرو کردم
این getElementById رو کجا باید استفاده کنم؟ متاسفانه تو جاوا خیلی مبتدی هستم :(
راهی نیست همون موقع که دارم تابع جاوااسکریپت رو صدا میزنم ، Button1.ClientID رو بفرستم براش؟

ermia_
سه شنبه 21 تیر 1390, 17:14 عصر
مرسی اما متوجه نشدم راه اولتون چیه