PDA

View Full Version : سوال: اجرا روی تگی که حاوی متن مورد نظر است



mehran63
دوشنبه 20 آذر 1391, 19:09 عصر
سلام
میخوام عملی روی تگ p که حاوی متن Mehran است اجرا شود ولی کار نمیکند

$('[id$="Button1"]').click(function (e) {
e.preventDefault();
$(" p:contains (Mehran)").toggle();
});

hakan648
چهارشنبه 22 آذر 1391, 23:36 عصر
سلام

من مشابه این کد رو در همینجا با فایرباگ تست کردم و کار کرد :

jQuery("h2.title.icon").click(function(e){ e.preventDefault(); jQuery(".username_container strong:contains(mehran63)").toggle(); });

دقت کنید که کوچکی و بزرگی حروف اهمیت دارد! Mehran != mehran

mehran63
پنج شنبه 23 آذر 1391, 11:46 صبح
کد رو به شکل زیر نوشتم ولی جواب نداد
jQuery('[id$="Button1"]').click(function (e) { e.preventDefault(); jQuery(".username_container strong:contains(Mehran)").toggle(); });

hakan648
پنج شنبه 23 آذر 1391, 11:55 صبح
دوست عزیز! بنده گفتم "من مشابه این کد رو در همینجا با فایرباگ تست کردم و کار کرد" ، منظورم این نبود که شما هم همین کد رو در برنامه استفاده کنید.
در همون کدی که خودتون نوشتید ، چک کنید که متن داخل تگ p دقیقا برابر با متنی که در کد مشخص کردید برابر هست یا خیر .
یعنی ببینید دقیقا عبارت Mehran در تگ p نوشته شده یا نه. ( اگر بصورت mehran نوشته باشید قطعا کار نمیکنه )

mehran63
پنج شنبه 23 آذر 1391, 19:49 عصر
متن دقیقا همان است
با Copy, Past هم امتحان کردم

hakan648
پنج شنبه 23 آذر 1391, 21:36 عصر
تنها راهی که به ذهنم میرسه اینه که کد کامل صفحه رو قرار بدید تا بررسی کنیم.

mehran63
پنج شنبه 23 آذر 1391, 22:50 عصر
<%@ Page Language="C#‎" AutoEventWireup="true" CodeFile="Default4.aspx.cs" Inherits="Default4" %>

<!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">
<title>Untitled Page</title>
<script src="scripts/jQuery.js" type="text/javascript"></script>
<script src="scripts/my-JScript.js" type="text/javascript"></script>

<style type="text/css">
.btn1
{
background-color:Aqua;
}
</style>
</head>
<body>
<form id="form1" runat="server">
<div align="center">

<asp:DropDownList ID="DropDownList1" runat="server"
onselectedindexchanged="DropDownList1_SelectedIndexChanged" AutoPostBack="true">
<asp:ListItem>guilan</asp:ListItem>
<asp:ListItem>tehran</asp:ListItem>
</asp:DropDownList>
<br />
<br />
<asp:DropDownList ID="DropDownList2" runat="server">
</asp:DropDownList>
<br />
<br />
<div id="divTextBox">
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<br />
<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
</div>
<br />
<br />
<asp:Button ID="Button1" CssClass="btn1" runat="server" onclick="Button1_Click" Text="Button" />

<p>Hellooooo</p>
<p>Mehran</p>
</div>
</form>
</body>
</html>

$('[id$="Button1"]').click(function (e) {
e.preventDefault();
$(" p:contains (Mehran)").toggle();
});

mehran63
یک شنبه 26 آذر 1391, 11:10 صبح
چرا این کد کار نمیکنه

hakan648
یک شنبه 26 آذر 1391, 20:48 عصر
به احتمال زیاد مشکل از ID کنترل سمت سرورتون هست؛ Button1 .

قسمت دومی کدهاتون رو در خود صفحه (و نه در یک فایل خارجی) و به این شکل بنویسید :

$('[id$="<%=Button1.ClientID%>"]').click(function (e) {
e.preventDefault();
$(" p:contains (Mehran)").toggle();
});

mehran63
چهارشنبه 29 آذر 1391, 10:41 صبح
این روش هم جواب نداد

hakan648
چهارشنبه 29 آذر 1391, 14:37 عصر
فاصله ی بین contains و پرانتز رو حذف کنید :

$('[id$="<%=Button1.ClientID%>"]').click(function (e) {
e.preventDefault();
$("p:contains(Mehran)").toggle();
});

mehran63
پنج شنبه 30 آذر 1391, 00:28 صبح
این رو هم تست کردم ولی نشد

hakan648
پنج شنبه 30 آذر 1391, 09:17 صبح
جواب نداد یعنی چی؟
من همون سورس صفحه ای که قرار داده بودید رو تغییر دادم و کار کرد. شما خطایی دریافت کردید؟

دقیقا همین کد رو بدون تغییر جایگزین کد صفحه ی Default4.aspx بکنید:


<%@ Page Language="C#‎‎" AutoEventWireup="true" CodeFile="Default4.aspx.cs" Inherits="Default4" %>

<!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 id="Head1" runat="server">
<title>Untitled Page</title>
<%--<script src="scripts/my-JScript.js" type="text/javascript"></script>--%>

<style type="text/css">
.btn1 {
background-color: Aqua;
}
</style>
</head>
<body>
<form id="form1" runat="server">
<div align="center">

<asp:DropDownList ID="DropDownList1" runat="server"
OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged" AutoPostBack="true">
<asp:ListItem>guilan</asp:ListItem>
<asp:ListItem>tehran</asp:ListItem>
</asp:DropDownList>
<br />
<br />
<asp:DropDownList ID="DropDownList2" runat="server">
</asp:DropDownList>
<br />
<br />
<div id="divTextBox">
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<br />
<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
</div>
<br />
<br />
<asp:Button ID="Button1" CssClass="btn1" runat="server" OnClick="Button1_Click" Text="Button" />

<p>Hellooooo</p>
<p>Mehran</p>
</div>
</form>
<script src="scripts/jQuery.js" type="text/javascript"></script>
<script type="text/javascript">
$('[id$="<%=Button1.ClientID%>"]').click(function (e) {
e.preventDefault();
$("p:contains(Mehran)").toggle();
});
</script>
</body>
</html>

از صحیح بودن آدرس فایل jQuery هم اطمینان حاصل کنید.

mehran63
پنج شنبه 30 آذر 1391, 10:52 صبح
ممنون
این شکلی کار کرد
پس چرا وقتی تو یه فایل خارجی میزارم کار نمیکنه وقتی رو دکمه میزنم فقط صفحه یک بار رفرش میشه؟

کد زیر با button از نوع html کار میکند ولی با button از نوع asp.net کار نمیکنه
$('[id$="Button1"]').click(function () {
e.preventDefault();
$("p#my-p").html("hello");
});

این کد نه با تگ html و نه با کد ASP.NET کار نکرد
$("#Text1").mouseover(function () {
$(this).next("#Text2").slideDown("slow");
});

hakan648
پنج شنبه 30 آذر 1391, 13:22 عصر
دوست عزیز ، سعی کنید خیلی بیشتر دقت کنید. فکر کنم در تاپیک های دیگه ی شما هم بهتون عرض کردم این مورد رو:
ID ِ کنترل های سمت سرور در ASP.NET ، معمولا به همون شکل رندر نمیشن. ( به سورس صفحه نگاه کنید. )

برای بدست آوردن ID ای که برای یک کنترل سمت سرور رندر میشه باید از مقدار ClientID اون کنترل کمک گرفت.

به این صورت :

<%=Button1.ClientID%>این کد فقط در صفحه ی ASPX معتبر هست و در فایل های JS که گفتید ، معتبر نیست.


کد زیر با button از نوع html کار میکند ولی با button از نوع asp.net کار نمیکنهدلیل رو در بالا عرض کردم ، حتما یک بار سورس صفحه رو نگاه کنید تا متوجه بشید.


لطفا تا این مورد مهم رو کاملا متوجه نشدید و درک نکردید ، کد ننویسید. دلیل خیلی از مشکلاتتون همین عدم آگاهی از برخی رفتارهای ساده است.

برای اطلاعات و موارد بیشتر هم جستجو کنید.

موفق باشید ...

mehran63
جمعه 01 دی 1391, 16:39 عصر
سلام
دوست عزیز متشکر
1- سورس رو در حالت قبل اجرا و بعد از اجرا برایتان میگزارم ،همانطور که مشاهده میفرمایید ID در دو حالت یکی است


<%@ Page Language="C#‎‎‎" AutoEventWireup="true" CodeFile="Default4.aspx.cs" Inherits="Default4" %>

<!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">
<title>Untitled Page</title>

<script src="scripts/jQuery1.8.3.js" type="text/javascript"></script>
<script src="scripts/my-JScript.js" type="text/javascript"></script>

<style type="text/css">
.btn1
{
background-color:Aqua;
}
</style>


</head>
<body>
<form id="form1" runat="server">
<div align="center">

<asp:DropDownList ID="DropDownList1" runat="server"
onselectedindexchanged="DropDownList1_SelectedIndexChanged" AutoPostBack="true">
<asp:ListItem>Fars</asp:ListItem>
<asp:ListItem>tehran</asp:ListItem>
</asp:DropDownList>
<br />
<br />
<asp:DropDownList ID="DropDownList2" runat="server">
</asp:DropDownList>
<br />
<br />
<div id="divTextBox">
<asp:TextBox CssClass="txt" ID="TextBox1" runat="server"></asp:TextBox>
<br />
<asp:TextBox CssClass="txt" ID="TextBox2" runat="server"></asp:TextBox>
</div>
<br />
<br />
<input id="Text1" name="t1" type="text" />
<br />
<input id="Text2" name="t2" type="text" />
<br />
<asp:Button ID="Button1" CssClass="btn1" runat="server" onclick="Button1_Click" Text="Button" />

<input id="Button2" class="btn1" type="button" value="(html)button" />
<br />
<br />
<a href="http://iran.ir" target="_blank" style="font-size:22px;">ایران</a>
<br />
<p id="my-p1">Hellooooo</p>
<p id="my-p2"> <b>Mehran</b></p>

<asp:CheckBox ID="CheckBox1" runat="server" />
طراحی وب
<ul>
<li class="Items">HTML </li>
<li class="Items">CSS </li>
<li class="Items">Flash </li>
</ul>
برنامه نویسی وب
<ul>
<li class="Items">ASP.Net </li>
<li class="Items">PHP </li>
<li class="Items">Java Script </li>
<li class="Items">jQuery </li>
</ul>
<br />

<table>

<tr>
<th>Tehran</th>
<td>tehran</td>
<td>Rey</td>
<td>Eslam Shahr</td>
</tr>
</table>

</div>
</form>

<%-- <script type="text/javascript">
$('[id$="<%=Button1.ClientID%>"]').click(function (e) {
e.preventDefault();
$("p:contains(Mehr)").toggle();
});
</script>--%>

</body>
</html>


کد در حین اجرا





<!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><title>
Untitled Page
</title>

<script src="scripts/jQuery1.8.3.js" type="text/javascript"></script>
<script src="scripts/my-JScript.js" type="text/javascript"></script>

<style type="text/css">
.btn1
{
background-color:Aqua;
}
</style>


</head>
<body>
<form method="post" action="Default4.aspx" id="form1">
<div class="aspNetHidden">
<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />
<input type="hidden" name="__LASTFOCUS" id="__LASTFOCUS" value="" />
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKLTgxNzY1MTI0Mg9kFgICAw9kFgICAQ8QZGQWAWZkGAE FHl9fQ29udHJvbHNSZXF1aXJlUG9zdEJhY2tLZXlfXxYBBQlDa GVja0JveDGBm1DRxnoZTTDqoHtjBbz8a2jszBkD8ICB0nP71sr 06Q==" />
</div>

<script type="text/javascript">
//<![CDATA[
var theForm = document.forms['form1'];
if (!theForm) {
theForm = document.form1;
}
function __doPostBack(eventTarget, eventArgument) {
if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
theForm.__EVENTTARGET.value = eventTarget;
theForm.__EVENTARGUMENT.value = eventArgument;
theForm.submit();
}
}
//]]>
</script>


<div class="aspNetHidden">

<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWCAKeiY6zDwKd5I/lCgL315v4BwLu+5HYBALs0bLrBgLs0fbZDAKM54rGBgKC5Ne7C ZTPCbVEmvJTxBDBFJJrS5uDeenbAJYJgSz1pyP6Swrq" />
</div>
<div align="center">

<select name="DropDownList1" onchange="javascript:setTimeout(&#39;__doPostBack(\&#39;DropDownList 1\&#39;,\&#39;\&#39;)&#39;, 0)" id="DropDownList1">
<option selected="selected" value="Fars">Fars</option>
<option value="tehran">tehran</option>

</select>
<br />
<br />
<select name="DropDownList2" id="DropDownList2">

</select>
<br />
<br />
<div id="divTextBox">
<input name="TextBox1" type="text" id="TextBox1" class="txt" />
<br />
<input name="TextBox2" type="text" id="TextBox2" class="txt" />
</div>
<br />
<br />
<input id="Text1" name="t1" type="text" />
<br />
<input id="Text2" name="t2" type="text" />
<br />
<input type="submit" name="Button1" value="Button" id="Button1" class="btn1" />

<input id="Button2" class="btn1" type="button" value="(html)button" />
<br />
<br />
<a href="http://hran.ir" target="_blank" style="font-size:22px;">ایران</a>
<br />
<p id="my-p1">Hellooooo</p>
<p id="my-p2"> <b>Mehran</b></p>

<input id="CheckBox1" type="checkbox" name="CheckBox1" />
طراحی وب
<ul>
<li class="Items">HTML </li>
<li class="Items">CSS </li>
<li class="Items">Flash </li>
</ul>
برنامه نویسی وب
<ul>
<li class="Items">ASP.Net </li>
<li class="Items">PHP </li>
<li class="Items">Java Script </li>
<li class="Items">jQuery </li>
</ul>
<br />

<table>

<tr>
<th>Tehran</th>
<td>tehran</td>
<td>Rey</td>
<td>Eslam Shahr</td>
</tr>
</table>

</div>
</form>



</body>
</html>


2- خب مشاهده فرمودید که ID تغییر نمیکند با این حال در کد خارجی با اسم my-JScript.js از دستور e.preventDefault(); برای رفع این مشکل استفاده کردم در برخی از کدها جواب داد و در برخی جواب نمیدهد مثلا سورس به صورت زیر کار میکند
$("#Button1").click(function () {
$("p#my-p1").html("Welcom");
});
ولی به شکل زیر که دستور e.preventDefault(); را دارد کار نمیکند
$('[id$="Button1"]').click(function () {
e.preventDefault();
$("p#my-p1").html("Welcom");
});
و همین روش یعنی استفاده از $('[id$="Button1"]').click(function () {
e.preventDefault(); روی یه سری توابع مثل .toggle() جواب میده

hakan648
جمعه 01 دی 1391, 18:29 عصر
دوست عزیز ، تغییر ID ِ کنترل های سمت سرور ، یک چیز ثابت شده هست و حرف بنده نیست ، کلا این روشی که شما پیش گرفتید صحیح نیست و تا وقتی به این شکل پیش برید ، نتایجِ "یکبار شد و یکبار نشد" غیرعادی نیست.
البته که ID ِ کنترل بعضی اوقتا بدون تغییر رندر میشه و در کلاینت به همون شکل قابل دسترسی هست اما در بعضی اوقات به این شکل نیست. ( برای اطلاع بیشتر جستجو کنید. )
پس برای دریافت نیتجه ی یکسان در همه حالت ، از خاصیت ClientID باید استفاده کنید.

اگر مایل هستید که کدهاتون رو در یک فایل خارجی قرار دهید ، قسمت های بدون تغییر رو در فایل .js قرار بدید و قسمت های متغییر مثل همین ID رو در صفحه ی .aspx .

موفق باشید ...

mehran63
جمعه 01 دی 1391, 19:08 عصر
اگر مایل هستید که کدهاتون رو در یک فایل خارجی قرار دهید ، قسمت های بدون تغییر رو در فایل .js قرار بدید و قسمت های متغییر مثل همین ID رو در صفحه ی .aspx .

برای این که تمام فایلها رو تو فایل خارجی نوشت یک راه اصولی وجود ندارد؟

hakan648
جمعه 01 دی 1391, 20:13 عصر
وجود دارد! اما نمیشه یک روش برای همه ی حالات ارائه کرد.

برای همین رویداد کلیک از این کد در یک فایل خارجی استفاده کنید:
my-JScript.js

function someFuncName(buttonId) {
$("#" + buttonId).bind("click", function (e) {
e.preventDefault();
$("p:contains(Mehran)").toggle();
});
}

و به این شکل تابع تعریف شده رو در صفحه ی مورد نظر فراخوانی کنید:
Page.aspx


<body>
<form id="form1" runat="server">
<!-- other form content -->
<asp:Button ID="Button1" CssClass="btn1" runat="server" OnClick="Button1_Click" Text="Button" />
</form>
<script src="scripts/jQuery.js" type="text/javascript"></script>
<script src="scripts/my-JScript.js" type="text/javascript"></script>
<script type="text/javascript">
someFuncName("<%=Button1.ClientID%>");
</script>
</body>

یک مزیت دیگه ی استفاده از ClientID اینه که اگر زمانی ID یک کنترل تغییر کرد و یا کلا کنترل حذف شد ، نا معتبر بودن کدهای جاوا اسکریپت در زمان اجرای پروژه با ارور مشخص میشه و از خیلی از مشکلات دیگه جلوگیری میکنه. در اصل شما یک ارجاع به کنترل سمت سرورتون دارید!

mehran63
جمعه 01 دی 1391, 20:33 عصر
کدی که گذاشتید عینا در سورس قرار دادم ولی وقتی رو Button کلیک میکنم فقط صفحه یک بار رفرش میشه

hakan648
جمعه 01 دی 1391, 21:32 عصر
دوست عزیز امیدوارم ناراحت نشید از حرفم ، اما بنده اینجوری نمیتونم به شما کمک کنم. شما نباید عینا" یک کد رو بزارید و منتظر باشید نتیجه بده.
شما باید در مورد کدی که ارائه میشه یا حرفی که زده میشه فکر کنید و سعی کنید به نتیجه برسید.
الان در همین مورد احتمال میدم که کدهارو در فایل خروجی قرار نداده باشید یا ... یه کم دقتی مشابه این.

mehran63
یک شنبه 03 دی 1391, 01:46 صبح
با سلام
نه دوست عزیز وقتی میگم عینا یعنی بدون تغییر در کدتون

<%@ Page Language="C#‎‎‎‎" AutoEventWireup="true" CodeFile="Default4.aspx.cs" Inherits="Default4" %>

<!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">
<title>Untitled Page</title>

<script src="scripts/jQuery1.8.3.js" type="text/javascript"></script>
<script src="scripts/my-JScript.js" type="text/javascript"></script>

<style type="text/css">
.btn1
{
background-color:Aqua;
}
</style>


</head>
<body>
<form id="form1" runat="server">
<div align="center">

<asp:DropDownList ID="DropDownList1" runat="server"
onselectedindexchanged="DropDownList1_SelectedIndexChanged" AutoPostBack="true">
<asp:ListItem>Fars</asp:ListItem>
<asp:ListItem>tehran</asp:ListItem>
</asp:DropDownList>
<br />
<br />
<asp:DropDownList ID="DropDownList2" runat="server">
</asp:DropDownList>
<br />
<br />
<div id="divTextBox">
<asp:TextBox CssClass="txt" ID="TextBox1" runat="server"></asp:TextBox>
<br />
<asp:TextBox CssClass="txt" ID="TextBox2" runat="server"></asp:TextBox>
</div>
<br />
<br />
<input id="Text1" name="t1" type="text" />
<br />
<input id="Text2" name="t2" type="text" />
<br />
<asp:Button ID="Button1" CssClass="btn1" runat="server" onclick="Button1_Click" Text="Button" />

<input id="Button2" class="btn1" type="button" value="(html)button" />
<br />
<br />
<a href="http://iran.ir" target="_blank" style="font-size:22px;">ایران</a>
<br />
<p id="my-p1">Hellooooo</p>
<p id="my-p2"> <b>Mehran</b></p>

<asp:CheckBox ID="CheckBox1" runat="server" />
طراحی وب
<ul>
<li class="Items">HTML </li>
<li class="Items">CSS </li>
<li class="Items">Flash </li>
</ul>
برنامه نویسی وب
<ul>
<li class="Items">ASP.Net </li>
<li class="Items">PHP </li>
<li class="Items">Java Script </li>
<li class="Items">jQuery </li>
</ul>
<br />

<table>

<tr>
<th>Tehran</th>
<td>tehran</td>
<td>Rey</td>
<td>Eslam Shahr</td>
</tr>
</table>

</div>
</form>

<script src="scripts/jQuery.js" type="text/javascript"></script>
<script src="scripts/my-JScript.js" type="text/javascript"></script>
<script type="text/javascript">
someFuncName("<%=Button1.ClientID%>");
</script>

</body>
</html>

function someFuncName(buttonId) {
$("#" + buttonId).bind("click", function (e) {
e.preventDefault();
$("p:contains(Mehran)").toggle();
});
}

hakan648
یک شنبه 03 دی 1391, 07:48 صبح
ارجاعاتی که به jQuery و my-JScript در انتهای صفحه قرار دادم کافی هستند و دیگه نیاز نیست در Header هم یکبار ارجاع بدید.
کدی هم که شما "دقیقا" از کدی که من ارائه کردم در بالا استفاده کردید رو ، "دقیقا" کپی کردم و کار کرد.
من دیگه مسائلی مثل صحیح بودن آدرس فایل و ... همچین مواردی رو در نظر نمیگیرم ، چون خود شما حتما چک کردید.( آدرس scripts/my-JScript.js صحیح است؟ )

در نهایت اگر بازهم مشکل دارید ، فایرباگ رو نصب کنید و خطایی که احتمالا برنامه میده رو بررسی کنید.