ช่วยด้วยครับ...งมโข่งมาหลายวันแล้ว
คือผมได้แก้ไขเวปโปรเจคของผม เปนแบบตามบทความ บทที่ 19 การสร้างเว็บไซต์แบบ AJAX (ตอนที่ 1) อะครับก็แสดงออกมาถูกต้องทุกหน้าร่วมถึงหน้าที่เกิดเปนปัญหาด้วยก็แสดงอกมาถูกต้อง
ซึ่งก็คือหน้าสมัครสมาชิก(member.php) มันไม่สามารถใช้ฟังชั่นการตรวจสอบการกรอกข้อมูลขณะพิมได้ ทั้งๆที่ก็ก๊อบคำสั่งฟังชั่นไปไว้หน้าหลัก(index.php)แล้ว แต่ทำไมถึงไม่ยอมทำงาน ได้โปรดบอกผมที ผมหยุดอยู่ตรงนี้มาหลายวันแล้วครับ
โค้ดหน้าindex.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html >
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Computer Hardware Online</title>
<link href="styles.css" rel="stylesheet" type="text/css" />
</head>
<script type="text/javascript">
window.onload =function(){
Event.observe("USERNAME","keyup",checkUser);
Event.observe("USER_E_MAIL","keyup",checkEmail);
Event.observe("PASSWORD","keyup",checkPass);
Event.observe("PASSWORD1","keyup",conPass);
Event.observe("USER_NAME","keyup",checkFirst);
Event.observe("USER_LASTNAME","keyup",checkLast);
$('USERNAME').focus();
$('USER_E_MAIL').focus();
}
//==============================================
function checkUser(event){
var user=Event.element(event).value;
if(user=="")
{
$("erruser").innerHTML="<font color=#FF0000>*คุณยังไม่ได้กรอก Username!</font>";
}
else{//else1
if(user.length<4)
{
$("erruser").innerHTML="<font color=#FF0000>ต้องไม่น้อยกว่า4ตัวอักษร!</font>";
}
else{//else
if(user.length>8)
{
$("erruser").innerHTML="<font color=#FF0000>ต้องไม่เกินกว่า8ตัวอักษร!</font>";
}
else{//else
var user= Event.element(event).id.value;
new Ajax.Request("checkUser.php",
{ method:"GET",
parameters:$('regis').serialize(true),
onComplete:showMsg
}
);
}//else
}//else
}//else1
}
//=========================================
function checkPass(event){
var pass=Event.element(event).value;
if(pass=="")
{
$("errpass").innerHTML="<font color=#FF0000>*คุณยังไม่ได้กรอก ระหัสผ่าน!</font>";
}
else{//else
if(pass.length<4)
{
$("errpass").innerHTML="<font color=#FF0000>ห้ามน้อยกว่า4ตัว!</font>";
}
else{
if(pass.length>8)
{
$("errpass").innerHTML="<font color=#FF0000>ต้องไม่เกิน8ตัว!</font>";
}
else{
$("errpass").innerHTML="<font color = #00ff00>ผ่าน</font>";
}
}
}//else
}//func
//==========================================
function conPass(event)
{
var pass = document.getElementById('PASSWORD').value;
var conpass = Event.element(event).value;
if(conpass=="")
{
$("errconpass").innerHTML="<font color=#FF0000>*คุณยังไม่Confirm Password!</font>";
}
else{
if(conpass.length<4)
{
$("errconpass").innerHTML="<font color=#FF0000>ห้ามน้อยกว่า4ตัว!</font>";
}
else{
if( conpass != pass)
{
$("errconpass").innerHTML="ระหัสผ่านไม่ตรงกัน!";
}
else{
$("errconpass").innerHTML="<font color = #00ff00>ผ่าน</font>";
}//else
}//else
}//else
}//func
//======================
function checkEmail(event){
var email = document.getElementById('USER_E_MAIL').value;
if(email==""){
$("erremail").innerHTML="<font color = #FF0000>*ยังไม่ได้กรอกE-mail</font>";
}else{
var email= Event.element(event).id.value;
new Ajax.Request("checkEmail.php",
{ method:"GET",
parameters:$('regis').serialize(true),
onComplete:showEmail
}
);
}//else
}
//=========================================
function checkFirst(event){
var first=Event.element(event).value;
if(first=="")
{
$("errfirst").innerHTML="<font color=#FF0000>*คุณยังไม่ได้กรอกชื่อ!</font>";
}
else{//else
if(first.length<4)
{
$("errfirst").innerHTML="<font color=#FF0000>ชื่อห้ามน้อยกว่า4ตัว!</font>";
}else{
$("errfirst").innerHTML="<font color = #00ff00>ผ่าน</font>";
}
}//else
}//func
//==========================================
function checkLast(event){
var last=Event.element(event).value;
if(last=="")
{
$("errlast").innerHTML="<font color=#FF0000>*คุณยังไม่ได้กรอกนามสกุล!</font>";
}
else{//else
if(last.length<4)
{
$("errlast").innerHTML="<font color=#FF0000>นามสกุลห้ามน้อยกว่า4ตัว!</font>";
}else{
$("errlast").innerHTML="<font color=#00ff00> ผ่าน</font>";
}
}//else
}//func
//==========================================
function showMsg(result){
$("erruser").innerHTML=result.responseText;
}
function showEmail(result){
$("erremail").innerHTML=result.responseText;
}
//==========================================
function startRequest(){
var pForm= document.forms[0];
new Ajax.Request(pForm.action,
{ method: "POST",
parameters:$("regis").serialize(true),
onComplete:saveResult
}
);
}
//============================================
function saveResult(result){
if(result.responseText== 'Y')
{
window.location = 'login.php';
}
else
{
$("info").innerHTML=result.responseText;
}
}
</script>
<script type="text/javascript" src="js/prototype.js"></script>
<script src="ajax_framework.js"> </script>
<script type="text/javascript">
<!--
function Inint_AJAX() {
try { return new ActiveXObject("Msxml2.XMLHTTP"); } catch(e) {} //IE
try { return new ActiveXObject("Microsoft.XMLHTTP"); } catch(e) {} //IE
try { return new XMLHttpRequest(); } catch(e) {} //Native Javascript
alert("XMLHttpRequest not supported");
return null;
}
function loaddoc(module) {
var req=Inint_AJAX();
//แสดง icon คอยการ load ก่อนเลยถ้ามีการเรียกใช้ AJAX
document.getElementById("rightmodule").innerHTML='<div id="wait"><img src="images/K65872-2.gif" alt="" /><br /><br />กำลังโหลด...</div>';
req.onreadystatechange = function () {
if (req.readyState==4) {
if (req.status==200) {
var data=req.responseText; //รับค่ากลับมา
document.getElementById("rightmodule").innerHTML=data; //แสดงผล แทนรูปรอโหลด
Set_Cookie( 'module' , module ); //บันทึก module ที่เรียก ลง cookie สำหรับการ refresh หน้า
}
}
};
req.open("GET", module, true);
req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); // set Header
req.send(null); //ส่งค่า
}
function Set_Cookie(name, value, expires, path, domain, secure){
var today=new Date();
today.setTime(today.getTime());
if(expires){
expires = expires*1000*60*60*24;
};
var expires_date = new Date(today.getTime() + (expires));
document.cookie = name + "=" +escape(value) +
((expires) ? ";expires=" + expires_date.toGMTString() : "") +
((path) ? ";path=" + path : "") +
((domain) ? ";domain=" + domain : "") +
((secure) ? ";secure" : "");
};
</script>
</head>
<body onload="loaddoc('page1.php')"><!-- สำหรับการ refresh หน้า -->
<div id="bgrigth"><img src="images/body-bg1.jpg" width="163" height="738" /></div>
<div id="search">
<table width="231" border="0">
<tr>
<td width="148"><input type="text" name="textfield" id="textfield" /></td>
<td width="95">
<input type="submit" name="button" id="button" value="Search" /></td>
</tr>
</table>
</div>
<div id="container">
<!-- #masthead -->
<div id="masthead">
<h1><a href="">COMPUTER HARDWARE ONLINE</a></h1>
<ul>
<li id="home"><a href="javascript:loaddoc('page1.php')">Home</a></li>
<li id="product"><a href="javascript:loaddoc('page2.php')">Product</a></li>
<li id="member"><a href="javascript:loaddoc('member.php')">Member</a></li>
<li id="webborad"><a href="javascript:loaddoc('webboard.php')">Webborad</a></li>
</ul>
</div>
</div>
</div>
</p>
<div id="rightmodule">rightmodule</div>
</body>
</html>
โค้ดหน้าmember.php
<!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>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Computer Hardware Online</title>
<link href="styles.css" rel="stylesheet" type="text/css" />
<script type="text/javascript">
window.onload =function(){
Event.observe("USERNAME","keyup",checkUser);
Event.observe("USER_E_MAIL","keyup",checkEmail);
Event.observe("PASSWORD","keyup",checkPass);
Event.observe("PASSWORD1","keyup",conPass);
Event.observe("USER_NAME","keyup",checkFirst);
Event.observe("USER_LASTNAME","keyup",checkLast);
$('USERNAME').focus();
$('USER_E_MAIL').focus();
}
//==============================================
function checkUser(event){
var user=Event.element(event).value;
if(user=="")
{
$("erruser").innerHTML="<font color=#FF0000>*คุณยังไม่ได้กรอก Username!<img src=\"arrowaaa.gif\"/></font>";
}
else{//else1
if(user.length<4)
{
$("erruser").innerHTML="<font color=#FF0000>ต้องไม่น้อยกว่า4ตัวอักษร!</font>";
}
else{//else
if(user.length>8)
{
$("erruser").innerHTML="<font color=#FF0000>ต้องไม่เกินกว่า8ตัวอักษร!</font>";
}
else{//else
var user= Event.element(event).id.value;
new Ajax.Request("checkUser.php",
{ method:"GET",
parameters:$('regis').serialize(true),
onComplete:showMsg
}
);
}//else
}//else
}//else1
}
//=========================================
function checkPass(event){
var pass=Event.element(event).value;
if(pass=="")
{
$("errpass").innerHTML="<font color=#FF0000>*คุณยังไม่ได้กรอก ระหัสผ่าน!</font>";
}
else{//else
if(pass.length<4)
{
$("errpass").innerHTML="<font color=#FF0000>ห้ามน้อยกว่า4ตัว!</font>";
}
else{
if(pass.length>8)
{
$("errpass").innerHTML="<font color=#FF0000>ต้องไม่เกิน8ตัว!</font>";
}
else{
$("errpass").innerHTML="<font color = #00ff00>ผ่าน</font>";
}
}
}//else
}//func
//==========================================
function conPass(event)
{
var pass = document.getElementById('PASSWORD').value;
var conpass = Event.element(event).value;
if(conpass=="")
{
$("errconpass").innerHTML="<font color=#FF0000>*คุณยังไม่Confirm Password!</font>";
}
else{
if(conpass.length<4)
{
$("errconpass").innerHTML="<font color=#FF0000>ห้ามน้อยกว่า4ตัว!</font>";
}
else{
if( conpass != pass)
{
$("errconpass").innerHTML="ระหัสผ่านไม่ตรงกัน!";
}
else{
$("errconpass").innerHTML="<font color = #00ff00>ผ่าน</font>";
}//else
}//else
}//else
}//func
//======================
function checkEmail(event){
var email = document.getElementById('USER_E_MAIL').value;
if(email==""){
$("erremail").innerHTML="<font color = #FF0000>*ยังไม่ได้กรอกE-mail</font>";
}else{
var email= Event.element(event).id.value;
new Ajax.Request("checkEmail.php",
{ method:"GET",
parameters:$('regis').serialize(true),
onComplete:showEmail
}
);
}//else
}
//=========================================
function checkFirst(event){
var first=Event.element(event).value;
if(first=="")
{
$("errfirst").innerHTML="<font color=#FF0000>*คุณยังไม่ได้กรอกชื่อ!</font>";
}
else{//else
if(first.length<4)
{
$("errfirst").innerHTML="<font color=#FF0000>ชื่อห้ามน้อยกว่า4ตัว!</font>";
}else{
$("errfirst").innerHTML="<font color = #00ff00>ผ่าน</font>";
}
}//else
}//func
//==========================================
function checkLast(event){
var last=Event.element(event).value;
if(last=="")
{
$("errlast").innerHTML="<font color=#FF0000>*คุณยังไม่ได้กรอกนามสกุล!</font>";
}
else{//else
if(last.length<4)
{
$("errlast").innerHTML="<font color=#FF0000>นามสกุลห้ามน้อยกว่า4ตัว!</font>";
}else{
$("errlast").innerHTML="<font color=#00ff00> ผ่าน</font>";
}
}//else
}//func
//==========================================
function showMsg(result){
$("erruser").innerHTML=result.responseText;
}
function showEmail(result){
$("erremail").innerHTML=result.responseText;
}
//==========================================
function startRequest(){
var pForm= document.forms[0];
new Ajax.Request(pForm.action,
{ method: "POST",
parameters:$("regis").serialize(true),
onComplete:saveResult
}
);
}
//============================================
function saveResult(result){
if(result.responseText== 'Y')
{
window.location = 'login.php';
}
else
{
$("info").innerHTML=result.responseText;
}
}
</script>
<script type="text/javascript" src="js/prototype.js"></script>
<style type="text/css">
<!--
#bgpagemember {
position:absolute;
left:11px;
top:12px;
width:783px;
height:376px;
z-index:44;
}
#tablepagemember {
position:absolute;
left:74px;
top:60px;
width:658px;
height:495px;
z-index:45;
}
.style8 {color: #FFFFFF}
-->
</style>
</head>
<body>
<form id="regis" action="register.php" onsubmit="startRequest(); return false">
<div id="bgpagemember"><img src="images/featured-work-bg.jpg" width="783" height="706" /></div>
<div id="tablepagemember">
<div class="center_prod_box_big">
<div align="center">
<p align="left"><img src="images/register.jpg" alt="" width="95" height="28" /><img src="images/button-member1.jpg" alt="" width="96" height="28" /></p>
<p> </p>
<p> </p>
<fieldset>
<legend><span class="style4"><span class="style8">ข้อมูลสมาชิก</span></span></legend>
<p> </p>
<table width="521" border="0">
<tr>
<th width="210" align="right" scope="row"><div align="right" class="style8">
<h5 class="style2">Username:</h5>
</div></th>
<td width="301"><div align="left">
<h5>
<input name="txtUsername" type="text" id="USERNAME" size="20" maxlength="15" />
<span id="erruser" /></span></span></h5>
</div></td>
</tr>
<tr>
<th align="right" scope="row"><div align="right" class="style2 style8">
<h5>Password:</h5>
</div></th>
<td width="301"><div align="left">
<h5>
<input name="txtPass" type="password" id="PASSWORD" size="20" maxlength="15">
<font color="#FF0000"><span id="errpass" /></span></span></font></h5>
</div></td>
</tr>
<tr>
<th align="right" scope="row"><div align="right" class="style2 style8">
<h5>Re-Password:</h5>
</div></th>
<td width="301"><div align="left">
<h5>
<input name="txtPass1" type="password" id="PASSWORD1" size="20" maxlength="15" />
<font color="#FF0000"><span id="errconpass" /></span></span></font></h5>
</div></td>
</tr>
<tr>
<th align="right" scope="row"><div align="right" class="style2 style8">
<h5>ชื่อ:</h5>
</div></th>
<td width="301"><div align="left">
<h5>
<input name="txtName" type="text" onkeypress=checkFirst(); id="USER_NAME" maxlength="20">
<font color="#FF0000"><span id= "" /></span></span></font></h5>
</div></td>
</tr>
<tr>
<th align="right" scope="row"><div align="right" class="style2 style8">
<h5>นามสกุล:</h5>
</div></th>
<td width="301"><div align="left">
<h5>
<input name="txtLName" type="text" id="USER_LASTNAME" maxlength="20" />
<font color="#FF0000"><span id="errlast" /></span></span></font></h5>
</div></td>
</tr>
<tr>
<th align="right" scope="row"><div align="right" class="style2 style8">
<h5>หมายเลขบัตรประชาชน:</h5>
</div></th>
<td width="301"><div align="left">
<h5>
<input name="txtID_Person" type="text" onkeypress=check_number();id="USER_ID_CARD" maxlength="13">
</h5></td>
</tr>
<tr>
<th align="right" scope="row"><div align="right" class="style2 style8">
<h5>เบอร์โทรศัพท์ :</h5>
</div></th>
<td width="301"><label>
<div align="left">
<h5>
<input name="txtPhone" type="text" onkeypress=check_number(); id="USER_PHONE" size="20" maxlength="13" />
</h5>
</div>
<h5>
</label>
</h5></td>
</tr>
<tr>
<th align="right" scope="row"><div align="right" class="style2 style8">
<h5>E-Mail:</h5>
</div></th>
<td width="301"><div align="left">
<h5>
<input name="txtMail" type="text" id="USER_E_MAIL" maxlength="25">
<font color="#FF0000"><span id="erremail" /></span></span></font></h5>
</div></td>
</tr>
<tr>
<tr>
<th align="right" scope="row"><div align="right" class="style2 style8">
<h5>ที่อยู่ :</h5>
</div></th>
<td width="301" align="left"><div align="left">
<h5>
<textarea name="txtAddress" id="USER_ADDRESS" cols="25" rows="5"></textarea>
</h5></td>
</tr>
<tr>
<th colspan="2" align="center" scope="row"> </th>
</tr>
<tr>
<th colspan="2" align="center" scope="row"><input name="submit" type="submit" value="ตกลง">
<label>
<input name="reset" type="reset" value="ยกเลิก" />
</label>
<label> <div id="info"></div></label></th>
</tr>
</table>
</fieldset>
<p> </p>
</div>
</div>
</div>
</body>
</html>
ปัญหาก็คือ ถึงจะย้ายฟังก์ชั่นต่างๆไปไว้ที่หน้าหลักแล้ว แต่ก็คงยังมีบางส่วนที่ไม่สามารถนำไปไว้หน้าหลักได้ เช้นฟังก์ชั่นในกลุ่มดัก Event
window.onload =function(){
Event.observe("USERNAME","keyup",checkUser);
Event.observe("USER_E_MAIL","keyup",checkEmail);
Event.observe("PASSWORD","keyup",checkPass);
Event.observe("PASSWORD1","keyup",conPass);
Event.observe("USER_NAME","keyup",checkFirst);
Event.observe("USER_LASTNAME","keyup",checkLast);
$('USERNAME').focus();
$('USER_E_MAIL').focus();
}
ซึ่งมันคงไม่ทำงาน ทำให้ไม่สามารถตรวจสอบการพิมพ์ได้
ถ้าเคยได้อ่านบทความของผม น่าจะรู้ว่า onload จะไม่เกิดกับการเรียกใช้โดย Ajax
การแก้ปัญหา
1. ย้ายฟังก์ชั่นทั้งหมดไปไว้หน้าหลัก หรือ js ภายนอก แหละถูกแล้ว
2. ดักอีเวนต์ด้วย DOM ระดับ 1
<input type="text" onkeyup="checkUser(this)"....
3. อาจต้องมีการแก้ไขฟังก์ชั่นต่างๆเล็กน้อย
4. อ่านบทความของผมประกอบ
ขอบคุณอาจารย์มากครับ เดี๋ยวผมจะแก้ไขตามที่อาจารย์แนะนำ
ได้แล้วครับ ขอบคุณอาจารย์มากเลยครับ ทำให้งานผมได้เดินต่อสักที.....