<html>ผลลัพท์ เมื่อนำเมาส์ไปวางบน [?] จะขึ้น popup help text ขึ้นมาให้
<head>
<title>การแสดงกล่องข้อความแนะนำ</title>
<style type="text/css">
#hintBox{
position:absolute;
top:0;
background-color:white;
width:150px;
padding:3px;
border:1px solid black;
font:normal 11px Verdana;
line-height:18px;
z-index:100;
border-right:3px solid black;
border-bottom:3px solid black;
visibility: hidden;
}
.hint {
font-weith:bold;
color:navy;
margin:3px 8px;
}
</style>
<script language="javascript">
var horizontalOffset = "9px"
var verticalOffset = "0"
var ie = document.all
var ns6 = document.getElementById && !document.all
function getposOffset(elm, offsettype) {
var totalOffset = (offsettype == "left") ? elm.offsetLeft:elm.offsetTop;
var parentElement = elm.offsetParent;
while (parentElement != null) {
totalOffset = (offsettype == "left") ? totalOffset + parentElement.offsetLeft:totalOffset + parentElement.offsetTop;
parentElement = parentElement.offsetParent;
}
return totalOffset;
}
function ieTest() {
return(document.compatMode && document.compatMode != "BackCompat") ? document.documentElement:document.body;
}
function clearEdge(obj, whichedge) {
var edgeoffset = (whichedge == "rightedge") ? parseInt(horizontalOffset)*-1 : parseInt(verticalOffset)*-1
if (whichedge == "rightedge") {
var windowEdge = ie && !window.opera ? ieTest().scrollLeft + ieTest().clientWidth - 30 : window.pageXOffset + window.innerWidth - 30;
dropMenu.contentMeasure = dropMenu.offsetWidth;
if(windowEdge - dropMenu.x < dropMenu.contentMeasure)
edgeoffset = dropMenu.contentMeasure + obj.offsetWidth + parseInt(horizontalOffset);
}
else {
var windowEdge = ie && !window.opera ? ieTest().scrollTop + ieTest().clientHeight - 30 : window.pageYOffset + window.innerHeight - 30;
dropMenu.contentMeasure = dropMenu.offsetHeight;
if(windowEdge - dropMenu.y < dropMenu.contentMeasure)
edgeoffset = dropMenu.contentMeasure - obj.offsetHeight;
}
return edgeoffset;
}
function showhint(menuContent, obj, e, tipwidth){
if((ie||ns6) && document.getElementById("hintBox")) {
dropMenu = document.getElementById("hintBox");
dropMenu.innerHTML = menuContent;
dropMenu.x = getposOffset(obj, "left");
dropMenu.y = getposOffset(obj, "top");
dropMenu.style.left = dropMenu.x - clearEdge(obj, "rightedge") + obj.offsetWidth + "px";
dropMenu.style.top = dropMenu.y - clearEdge(obj, "bottomedge") + "px";
dropMenu.style.visibility = "visible";
obj.onmouseout = hideHint;
}
}
function hideHint(e) {
dropMenu.style.visibility = "hidden";
}
function createHint() {
var block = document.createElement("div");
document.body.appendChild(block);
block.setAttribute("id","hintBox");
}
if(window.addEventListener)
window.addEventListener("load", createHint, false);
else if(window.attachEvent)
window.attachEvent("onload", createHint);
else if(document.getElementById)
window.onload = createHint;
</script>
</head>
<body>
<form>
<b>ชื่อในการใช้งาน</b>
<input type="text" class="test" style="width: 152px" /><a href="#" class="hint" onmouseover=" showhint('พิมพ์ชื่อผู้ใช้ โดยให้เป็นอักขระจากแป้นพิมพ์เท่านี้น', this, event, '150px')"><font color="#6666FF">[?]</font></a><br />
<b>รหัสผ่าน</b><input type="text" class="test" /><a href="#" class="hint" onmouseover=" showhint('ใส่รหัสผ่าน โดยมีอย่างน้อย 8 ตัวอักษร', this, event, '200px')"><font color="#6666FF">[?]</font></a><br />
<br/>
<b>e-mail address</b><input type="text" class="test" style="width: 152px" ID="Text1" NAME="Text1" onmouseover=" showhint('กรุณาใส่ e-mail address', this, event, '200px')"/>
</form>
</body>
</html>
.NET Thai Developers | MCTS: SQL Server 2005 | MCSD: Microsoft.NET | MCAD: Microsoft.NET | MCPS: Microsoft Certified Professional
Showing posts with label AJAX. Show all posts
Showing posts with label AJAX. Show all posts
Friday, August 31, 2007
การทำ Popup help text โดยใช้ Javascript
หลักในการทำ Popup help text 1.สร้าง object div ใน html document โดยกำหนดให้ visibility เป็น hidden 2.กำหนดให้ object div ยกเลิกการซ่อนและแสดงผลความตำแหน่งที่ต้องการเมื่อเกิด event onmouseover บน control ที่ต้องการ Code : popuptext.htm
หรือเมื่อนำเมาส์ไปวางบน text box ของ e-mail address ก็จะขึ้น popup help text ขึ้นมาให้เช่นกัน
Hello World !! AJAX
เริ่มต้นเขียนโปรแกรม AJAX for ASP.NET 2005 กันกับโปรแกรม Hello World AJAX กันครับ
ที่ Link นี้เลย http://docs.google.com/Doc?id=dds4wnnw_22fg2z7v
Author by NooM
ที่ Link นี้เลย http://docs.google.com/Doc?id=dds4wnnw_22fg2z7v
Author by NooM
Tuesday, June 19, 2007
Client Callbacks without Postbacks in ASP.NET ตอนที่ 2
ในตอนที่แล้ว ผมได้อธิบายถึงหลักการในการเขียนโปรแกรม Callback without Postbacks ไปแล้ว ซึ่งทำให้เบราว์เซอร์ไม่จำเป็นต้อง Postback กลับไปยังเซิร์ฟเวอร์ทั้งเพจ content โดยใช้ Interface ชื่อ ICallbackEventHandler โดย implement เมธอด RaiseCallbackEvent และ GetCallbackResult มาในตอนนี้ ผมจะพูดถึงขึ้นตอนการเขียนโค้ดครับ
การสร้างเพจ Callbacks without Postbacks
ผมแสดงตัวอย่างเป็นขั้นตอน ดังนี้
1. ก่อนอื่นให้สร้างเพจ aspx ตามรูป

3. เขียนไคลเอ็นต์สริปต์เพื่อเรียกใช้เมธอด callback ในเพจ aspx ระหว่าง head tag
และกำหนดอีเว็นต์ OnClick ของ Button เพื่อเรียกฟังก์ชัน ShowText()
อธิบายได้ดังนี้
อธิบายโค้ด
ลองทดสอบโดย run โปรแกรมและลองใส่ชื่อใน TextBox1 แล้วกดปุ่ม Button ข้อความและแสดงบน TextBox2 โดยที่เพจไม่มีการ refresh
โค้ดในส่วนของ code-behind ทั้งหมด
และโค้ดเพจ Default.aspx ทั้งหมด
ด้วยความสามารถในการ Callback without Postback นี้เอง ทำให้เราสามารถเขียนโปรแกรม ASP.NET ได้โดยปราศจากการ submit ทั้งเพจ เพื่อเพิ่มความรวดเร็วในการทำงานของเว็บเพจ ให้ทำงานได้อย่างรวดเร็วและราบรื่น
การสร้างเพจ Callbacks without Postbacks
ผมแสดงตัวอย่างเป็นขั้นตอน ดังนี้
1. ก่อนอื่นให้สร้างเพจ aspx ตามรูป
- TextBox1 เป็นตัวรับข้อความ
- TextBox2 เป็นตัวแสดงข้อความ
- Button เป็น HTML control (ไม่มี runat="server") เป็นตัวเรียกฟังก์ชัน Callback
Partial Class _Default
Inherits System.Web.UI.Page
Implements ICallbackEventHandler
...
End Class
3. เขียนไคลเอ็นต์สริปต์เพื่อเรียกใช้เมธอด callback ในเพจ aspx ระหว่าง head tag
<head>
<script type="text/javascript">
01 function ShowText()
02 {
03 nametxt = document.getElementById("TextBox1").value;
04 CallServer(nametxt);
05 }
06 function ReceiveServerData(retVal)
07 {
08 document.getElementById("TextBox2").value = retVal;
09 }
</script>
<head>
และกำหนดอีเว็นต์ OnClick ของ Button เพื่อเรียกฟังก์ชัน ShowText()
<input id="Button1" type="button" value="button"
onclick="return ShowText();" />
อธิบายได้ดังนี้
- โค้ดบันทัดที่ 03 เป็นการดึง value ของ TextBox1 มา้เก็บไว้ที่ตัวแปร nametxt
- โค้ดบันทัดที่ 04 เป็นการเรียกฟังก์ชันชื่อ CallServer ซึ่งเป็นสคริปต์ฟังก์ชัน ที่เราจะเขียนขึ้นใน Code-behind อีกที เพื่อเรียกใช้ฟังก์ชันในเซิร์ฟเวอร์ต่อ
- ฟังก์ชัน ReceiveServerData เป็นฟังก์ชัน CallBack ที่รับผลลัพท์จากเซิร์ฟเวอร์กลับมา โดยฟังก์ชั่นนี้ จะถูกเรียกหลังจากที่การประมวลผลบนเซิร์เวอร์ เสร็จเรียบร้อยแล้ว ส่วนมากใช้เพื่อแสดงผลลัพท์ที่ได้รับกลับมา โดยมีโค้ดบันทัดที่ 08 เป็นการ assign ค่าที่ได้รับกลับมาแสดงใน TextBox2
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
01 Dim callbackRef As String
02 callbackRef = ClientScript.GetCallbackEventReference(Me, "arg", "ReceiveServerData", "context")
03 Dim callbackScript As String
04 callbackScript = "function CallServer(arg, context) {" & callbackRef & "; }"
05 ClientScript.RegisterClientScriptBlock(Me.GetType, "CallServerScript", callbackScript, True)
End Sub
อธิบายโค้ด
- ในอีเว็นต์ page_load นี้จะทำการเพิ่มไคลเอ็นต์สคริปต์โค้ด ที่จะ PostBack กลับไปยังเซิร์เวอร์ ให้สังเกตว่า "ReceiveServerData" นั้นเป็นชื่อฟังก์ชันสคริปต์ ที่เราได้สร้างไว้ตั้งแต่ข้อ 3 ซึ่งได้อธิบายไปแล้วว่าเป็นฟังก์ชันที่ใช้เพื่อแสดงผลลัพท์ที่ได้รับกลับมา
- ในบันทัด 04 เป็นการสร้างฟังก์ชันชื่อ CallServer ที่จะถูกเรียกใช้จากฟังก์ชัน ShowText ที่เขียนไว้แล้วในข้อที่ 3
- บันทัดที่ 05 เป็นการบอกให้เพิ่มสคริปต์นี้เข้าไปในเพจ aspx ตอน run-time
private retval as String
Public Sub RaiseCallbackEvent(ByVal eventArgument As
String) Implements System.Web.UI.ICallbackEventHandler.RaiseCallbackEvent
retval = "Hello world : " & eventArgument & ", " & Now.Date.ToShortDateString
End Sub
Public Function GetCallbackResult() As String Implements
System.Web.UI.ICallbackEventHandler.GetCallbackResult
Return retval
End Function
- เมธอด RaiseCallbackEvent เป็นเมธอดที่ทำงานเมื่อมีการเรียกใช้ เมธอด CallServer ที่ได้สร้างไว้ในข้อ 4 โดยทำการ concat ข้อมูลที่ได้ส่งมาใน eventArgument พารามิเตอร์ ซึ่งก็คือข้อมูลใน TextBox1.Text นั่นเอง เพราะถ้าดูจากโค้ดในข้อ 3 แล้ว ในบันทัดที่ 04 มีการเรียกใช้เมธอด CallServer โดยส่งข้อมูล TextBox1.Text เป็นพารามิเตอร์
- เมธอด GetCallbackResult เป็นเมธอดคืนผลลัพท์ไปยังเมธอด Callback ที่ได้ระบุไว้ขณะสร้างฟังก์ชัน CallServer ในข้อที่ 4 บันทัดที่ 02 ซึ่งเมธอด Callback นั้นก็คือ ReceiveServerData โดยใน ReceiveServerData ก็จะรับข้อมูลที่ได้ส่งมาจาก GetCallbackResult
- ส่วนตัวแปร retval เป็นตัวแปรแบบโกลบอลเพื่อเก็บค่าของข้อมูลระหว่างเมธอด RaiseCallbackEvent และ GetCallbackResult
ลองทดสอบโดย run โปรแกรมและลองใส่ชื่อใน TextBox1 แล้วกดปุ่ม Button ข้อความและแสดงบน TextBox2 โดยที่เพจไม่มีการ refresh
โค้ดในส่วนของ code-behind ทั้งหมด
Partial Class _Default
Inherits System.Web.UI.Page
Implements ICallbackEventHandler
Private retval As String
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim sb As New StringBuilder
Dim callbackRef As String
callbackRef = ClientScript.GetCallbackEventReference(Me, "arg", "ReceiveServerData", "context")
Dim callbackScript As String
callbackScript = "function CallServer(arg, context) {" & callbackRef & "; }"
ClientScript.RegisterClientScriptBlock(Me.GetType, "CallServer", callbackScript, True)
End Sub
Public Function GetCallbackResult() As String Implements System.Web.UI.ICallbackEventHandler.GetCallbackResult
Return retval
End Function
Public Sub RaiseCallbackEvent(ByVal eventArgument As String) Implements System.Web.UI.ICallbackEventHandler.RaiseCallbackEvent
retval = "Hello world : " & eventArgument & ", " & Now.Date.ToShortDateString
End Sub
End Class
และโค้ดเพจ Default.aspx ทั้งหมด
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %>
<!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 type="text/javascript">
function ShowText()
{
nametxt = document.getElementById("TextBox1").value;
CallServer(nametxt);
}
function ReceiveServerData(retVal)
{
document.getElementById("TextBox2").value = retVal;
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Label ID="Label1" runat="server" Font-Bold="True" Font-Italic="False" Font-Size="Large"
Font-Underline="True" Text="Client Callbacks Without Postbacks in ASP.NET"></asp:Label>
<br />
<br />
<asp:TextBox ID="TextBox1" runat="server">TextBox1</asp:TextBox>
<br />
<input id="Button1" type="button" value="button" onclick="return ShowText();" /><br />
<asp:TextBox ID="TextBox2" runat="server" Width="304px">TextBox2</asp:TextBox> <br />
</div>
</form>
</body>
</html>
ด้วยความสามารถในการ Callback without Postback นี้เอง ทำให้เราสามารถเขียนโปรแกรม ASP.NET ได้โดยปราศจากการ submit ทั้งเพจ เพื่อเพิ่มความรวดเร็วในการทำงานของเว็บเพจ ให้ทำงานได้อย่างรวดเร็วและราบรื่น
Wednesday, June 13, 2007
Client Callbacks without Postbacks in ASP.NET
ตามปกติในการเขียนโปรแกรม ASP.NET นั้น การทำงานของโค้ด ในฝั่งเซิร์ฟเวอร์ที่อยู่ใน code-behind หรือภายใน script runat="server" จะต้องมีการส่ง request ไปยังเซิร์ฟเวอร์ และ เซิร์ฟเวอร์ก็จะส่ง response กลับมา โดยในการส่ง request ไปยังเซิร์ฟเวอร์นั้น จะเป็นการทำการ submit form ซึ่งส่งผลให้ต้องส่ง content ทั้งหมดของเพจไปยังเซิร์ฟเวอร์ แล้วเซิร์ฟเวอร์ก็นำไปประมวลผลเพื่อส่ง content ของเพจที่ประมวลผลใหม่กลับมา ด้วยวิธีการนี้ทำให้เกิดการรอคอย โดยผู้ใช้ได้รับรู้การรอคอยนั้น ด้วยการกระพริบของเพจ ซึ่งบางครั้งกระพริบช้า บางครั้งกระพริบเร็ว เนื่องจากปัจจัยต่างๆ เช่น ความเร็วของสัญญาณ การประมวลของเซิร์ฟเวอร์ เป็นต้น
ด้วยเหตุนี้ใน ASP.NET 2.0 จึงมีวิธีในการจัดการการเรียกใช้เมธอดบนเซิร์ฟเวอร์ เพื่อนำมาแสดงผลบนเพจได้โดยที่ไม่ต้องทำการ Postback ทั้งเพจ ซึ่งเรียกว่า Callbacks without Postbacks
ด้วยวิธีการ Callbacks without Postbacks จะทำให้อีเว็นต์ที่เกิดขึ้นบนบราว์เซอร์ สามารถส่งการร้องขอไปยังเมธอดที่อยู่ใน Code-behind หรือ script runat="server" ได้ และเมื่อเมธอดบนเซิร์ฟเวอร์ได้ประมวลผลเพื่อให้ได้ผลลัพท์ที่ต้องการแล้ว ก็จะส่งหน้าที่กลับไปยังเมธอด Callback บนบราว์เซอร์เพื่อนำผลลัพท์ที่ได้มาแสดงบนเพจในบราว์เซอร์ โดยที่ไม่ต้อง PostBack เพจกลับไปยังเซิร์ฟเวอร์
Callbacks without Postbacks เกี่ยวข้องกับ Interface ชื่อ ICallbackEventHandler ซึ่งประกอบด้วยเมธอด
ตอนต่อไปผมจะแสดงวิธีการเขียนโค้ดครับ
ด้วยเหตุนี้ใน ASP.NET 2.0 จึงมีวิธีในการจัดการการเรียกใช้เมธอดบนเซิร์ฟเวอร์ เพื่อนำมาแสดงผลบนเพจได้โดยที่ไม่ต้องทำการ Postback ทั้งเพจ ซึ่งเรียกว่า Callbacks without Postbacks
ด้วยวิธีการ Callbacks without Postbacks จะทำให้อีเว็นต์ที่เกิดขึ้นบนบราว์เซอร์ สามารถส่งการร้องขอไปยังเมธอดที่อยู่ใน Code-behind หรือ script runat="server" ได้ และเมื่อเมธอดบนเซิร์ฟเวอร์ได้ประมวลผลเพื่อให้ได้ผลลัพท์ที่ต้องการแล้ว ก็จะส่งหน้าที่กลับไปยังเมธอด Callback บนบราว์เซอร์เพื่อนำผลลัพท์ที่ได้มาแสดงบนเพจในบราว์เซอร์ โดยที่ไม่ต้อง PostBack เพจกลับไปยังเซิร์ฟเวอร์
Callbacks without Postbacks เกี่ยวข้องกับ Interface ชื่อ ICallbackEventHandler ซึ่งประกอบด้วยเมธอด
- RaiseCallbackEvent เป็นเมธอดที่ถูกเรียก เมื่อมีการเรียกใช้เมธอดสำหรับการ Callback
- GetCallbackResult เป็นเมธอดที่คืนผลลัพท์ของการทำงาน ไปยังเมธอด Callback
ตอนต่อไปผมจะแสดงวิธีการเขียนโค้ดครับ
Tuesday, April 24, 2007
Javascript Intellisense in Visual Studio "Orcas"
ใน ScottGu's Blog ได้เล่าถึงความสามารถใหม่ของ "Orcas" อีกแล้ว
นั่นก็คือ Javascript Intellisense
ความสามารถนี้จะทำให้การเขียน Web application โดยใช้ Visual Studio สะดวกมากขึ้นไปกว่าเดิมมากๆ ครับ
ดูรายละเอียดตาม Link เลยครับ
ทั้งนี้ สามารถใช้ความสามารถนี้ได้ใน Visual Web Developer Express edition ซึ่งเป็น freeware ของ ASP.NET ซะด้วยซิ
นั่นก็คือ Javascript Intellisense
ความสามารถนี้จะทำให้การเขียน Web application โดยใช้ Visual Studio สะดวกมากขึ้นไปกว่าเดิมมากๆ ครับ
ดูรายละเอียดตาม Link เลยครับ
ทั้งนี้ สามารถใช้ความสามารถนี้ได้ใน Visual Web Developer Express edition ซึ่งเป็น freeware ของ ASP.NET ซะด้วยซิ
Thursday, April 5, 2007
AJAX for ASP.NET 2.0
Microsoft ASP.NET AJAX เป็นเทคโนโลยี AJAX ที่ Microsoft ได้พัฒนาขึ้นมา เพื่อลดความยุ่งยากของการพัฒนา AJAX web application โดย ASP.NET AJAX ได้รวม client-side code library กับ server-side controls ในการสร้าง AJAX web application ได้อย่างง่ายดาย
การใช้ ASP.NET AJAX ใน web application จะทำให้ application มีความสามารถ ดังนี้
- More dynamic.
- More reponsive.
- Easier to use.
- More intersting.
- Cross-browser compatible
Client-Side Functionality
ในฝั่ง client นั้น ASP.NET AJAX ได้จัดเตรียม JavaScript code files ที่เรียกว่า AJAX Library ให้ใช้งานได้อย่างสะดวก โดยนักพัฒนาไม่จำเป็นต้องเขียน JavaScript เอง
Server-Side Functionality
สำหรับฝั่ง Server นั้น จะมี กลุ่มของ server controls ที่เรียกว่า ASP.NET 2.0 AJAX Extensions ให้ใช้งาน
Extensible Framework
นอกจากนี้เรายังสามารถ extend server controls เพิ่มเติมเองได้ ทั้งยังสามารถ downlod ตัว AJAX Control Toolkit เพื่อเพิ่มเติม AJAX server controls ได้
AJAX Components
Asynchronous JavaScript and XML (AJAX) ประกอบไปด้วยองค์ประกอบต่อไปนี้
- HTML หรือ Hypertext Markup Language เป็นมาตรฐานสำหรับการแสดงผล Web application ของ Web browsers ซึ่งขณะนี้มี XHTML (Extensible HTML) เป็น version ใหม่ล่าสุด
- CSS หรือ Cascading style sheets เป็นมตารฐานที่ใช้สำหรับเพิ่ม style และ layout ของข้อมูลบน HTML หรือ XHTML pages
- DOM หรือ Document Object Model (อ่านว่า ดอม) เป็นตัวแทนของลำดับโครงสร้างข้อมูลใน HTML หรือ XHTML และสามารถเขียนโปรแกรมเพื่อเข้าถึงข้อมูลเหล่านั้นได้
- JavaScript คือ ภาษาสำหรับ client-side script function บน Web application ซึ่งถ้าสามารถทำให้ Web pages เป็น dynamic โดยทำงานร่วมกับ DOM เพื่อตอบสนองต่อการกระทำของผู้ใช้และเหตุการณ์ (event) ต่างๆ
HTML, CSS, DOM และ JavaScript จะถูกใช้ร่วมกันในการสร้าง Dynamic HTML หรือ DHTML - XML หรือ Extensible Markup Language เป็นภาษา markup แบบหนึ่ง ที่เป็นมาตรฐานสำหรับการแสดงข้อมูล ที่อิสระต่อ structure และ platform โดย AJAX จะใช้ XML เป็นข้อมูลในการแลกเปลี่ยนกับ server
- JSON หรือ JavaScript Object Notation คือ data-exchange formate ซึ่งใช้ประโยชน์สำหรับเป็นตัวแทนของ JavaScript object data โดยการทำ serialize และ deserialize objects จาก JSON data
- XMLHTTP คือ protocol ที่ใช้ในการแลกเปลี่ยน XML data ระหว่าง client และ server สามารถใช้ XmlHttpRequest object ในการเข้าถึง protocal นี้ได้
Subscribe to:
Posts (Atom)