รบกวนดู javacript เรื่อง createelement ให้หน่อยครับ
จริงๆ ผมไม่เข้าที่คุณอธิบายหรอกนะ แต่แก้ให้
Code (C#)
<script type="text/javascript">
function fncCreateElement(ItemIndex)
{
var mySpan = document.getElementById('mySpan');
var myElement1 = document.createElement('input');
var myElement2 = document.createElement('br');
myElement1.setAttribute('type', 'text');
myElement1.setAttribute('name', 'txt' + ItemIndex);
mySpan.appendChild(myElement1);
mySpan.appendChild(myElement2);
}
</script>
Code (C#)
for (int p = 0; p < 5; p++)
{
Page.ClientScript.RegisterStartupScript(this.GetType(), p.ToString(), "JavaScript:fncCreateElement(" + p.ToString() + ");", true);
}
ปล. แบบนี้มันแค่ javascript ธรมมดา ไม่ใช่ ajax หรอก
Date :
2010-03-11 16:39:16
By :
tungman
ขอบคุณมากครับ
ขอถามต่ออีกนิดครับคือว่าถ้าผมจะเปลี่ยนจาก textbox เป็น Element นี้แทน
<a class="dock-item" href="../App_admin/Mainadmin.aspx">
<img src="../App_Images/imagesmenu/home.jpg" alt="home" /><span>ผู้ดูแลระบบ</span>
</a>
ซึ่ง
<a class="dock-item" href="มาจากฐานข้อมูล">
<img src="มาจากฐานข้อมูล" alt="มาจากฐานข้อมูล" /><span>มาจากฐานข้อมูล</span>
</a>
จะเขียนยังไงครับช่วยแนะนำหน่อยนะครับ
Date :
2010-03-11 23:43:16
By :
kyokyocs
ถ้าผมทำให้ดูทำให้ดูคุณจะเข้าใจไหม งั้นมาอธิบายก่อนว่าต้องทำอย่างไร
1. การติดต่อฐานข้อมูลนั้นต้องใช้ server script
2. javascript เป็น client script
การที่จะให้ javascript ติดต่อฐานข้อมูลนั้นเป็นไปไม่ได้ แต่เราสามารถใช้ server script
generate โค้ด javascirpt พร้อมข้อมูลในฐานข้อมูลได้ โดย
1. query ข้อมูลที่ต้องการก่อน ซึ่งปกติผมจะ query มาเก็บไว้ใน datatable
2. ใช้ string builder สร้าง function ของ javascript และแทนค่าโดยใช้ข้อมูลที่ query นั้นในส่วนที่ต้องการ
3. register startup script ให้ string ที่เราเขียนลง page
TestJavaScript.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="TestJavaScript.aspx.cs" Inherits="TestJavaScript" %>
<!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></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Label ID="Label1" runat="server" Text=""></asp:Label>
</div>
</form>
</body>
</html>
TestJavaScript.aspx.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Text;
public partial class TestJavaScript : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
DataTable Dt = // <-- Query ข้อมูลจาก Database มาใส่ไว้ในนี้
// ซึ่งข้อมูลของผมมี Field 4 อันคือ
// HyperLink = ลิงค์ของ tag a
// ImagePath = path ของรูป
// ImageAlt = alt ของรูป
// AdminName = ชื่อ admin ใส่ใน span
CreateJavaScript("MyJavaScript");
foreach (DataRow Dr in Dt.Rows)
{
Page.ClientScript.RegisterStartupScript(this.GetType(), Dr["AdminName"].ToString(), "JavaScript:fncCreateElement('" + Dr["HyperLink"].ToString() + "', '" + Dr["ImagePath"].ToString() + "', '" + Dr["ImageAlt"].ToString() + "', '" + Dr["AdminName"].ToString() + "');", true);
}
}
protected void CreateJavaScript(string KeyName)
{
// Build the JavaScript String
StringBuilder Sb = new StringBuilder();
Sb.Append("<script type=\"text/javascript\">\n");
Sb.Append("\tfunction fncCreateElement(LinkString, ImagePath, ImageAlt, AdminName)\n");
Sb.Append("\t{\n");
Sb.AppendFormat("\t\tvar mySpan = document.getElementById('{0}');\n\n", Label1.ClientID);
Sb.Append("\t\tvar myElement1 = document.createElement('a');\n");
Sb.Append("\t\tvar myElement2 = document.createElement('img');\n");
Sb.Append("\t\tvar myElement3 = document.createElement('span');\n");
Sb.Append("\t\tvar textNode = document.createTextNode(AdminName);\n");
Sb.Append("\t\tvar newLine = document.createElement('br');\n\n");
Sb.Append("\t\tmyElement1.setAttribute('class', 'dock-item');\n");
Sb.Append("\t\tmyElement1.setAttribute('href', LinkString);\n\n");
Sb.Append("\t\tmyElement2.setAttribute('src', ImagePath);\n");
Sb.Append("\t\tmyElement2.setAttribute('alt', ImageAlt);\n");
Sb.Append("\t\tmyElement2.setAttribute('border', '0');\n\n");
Sb.Append("\t\tmySpan.appendChild(myElement1);\n");
Sb.Append("\t\tmyElement1.appendChild(myElement2);\n");
Sb.Append("\t\tmyElement1.appendChild(myElement3);\n");
Sb.Append("\t\tmyElement3.appendChild(textNode);\n");
Sb.Append("\t\tmySpan.appendChild(newLine);\n");
Sb.Append("\t}\n");
Sb.Append("</script>\n");
// Register the script code with the page.
Type t = this.GetType();
ClientScriptManager cs = Page.ClientScript;
if (!cs.IsClientScriptBlockRegistered(t, KeyName))
cs.RegisterClientScriptBlock(t, KeyName, Sb.ToString(), false);
}
}
ถามกลับทำไมต้องใช้ javascript ด้วยหรือ ใช้ add control แบบ dynamic ง่ายกว่าตั้งเยอะ
Date :
2010-03-12 10:40:42
By :
tungman
ขอบคุณมากๆ อีกครั้งนะครับ เรื่องการดึงข้อมูลจากฐานข้อมูลผมก็ใช้วิธีแบบของคุณ tungman ครับ ที่ผมติดปัญหาก็คือทำ server script generate โค้ด javascirpt แบบที่คุณ tungman ทำมาให้ดูไม่เป็น แต่ตอนนี้คุณ tungman ก็ทำให้ผมได้เข้าใจแล้วครับและรู้วิธีแก้ปัญหาแล้ว ผมขอขอบคุณคุณ tungman อีกครั้งครับ
Date :
2010-03-12 10:52:07
By :
kyokyocs
ให้อีกทางเลือกแล้วกัน
TestDynamicControls.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="TestDynamicControls.aspx.cs" Inherits="TestDynamicControls" %>
<!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></title>
</head>
<body>
<form id="form1" runat="server">
<div>
</div>
</form>
</body>
</html>
TestDynamicControls.aspx.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
public partial class TestDynamicControls : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
DataTable Dt = // <-- Query ข้อมูลจาก Database มาใส่ไว้ในนี้
// ซึ่งข้อมูลของผมมี Field 4 อันคือ
// HyperLink = ลิงค์ของ tag a
// ImagePath = path ของรูป
// ImageAlt = alt ของรูป
// AdminName = ชื่อ admin ใส่ใน span
foreach (DataRow Dr in Dt.Rows)
{
HyperLink MyLink = new HyperLink();
MyLink.NavigateUrl = Dr["HyperLink"].ToString();
MyLink.CssClass = "dock-item";
Page.Form.Controls.Add(MyLink);
Image MyImage = new Image();
MyImage.ImageUrl = Dr["ImagePath"].ToString();
MyImage.AlternateText = Dr["ImageAlt"].ToString();
MyLink.Controls.Add(MyImage);
Label MyLabel = new Label();
MyLabel.Text = Dr["AdminName"].ToString();
MyLink.Controls.Add(MyLabel);
Page.Form.Controls.Add(new LiteralControl(Environment.NewLine));
Page.Form.Controls.Add(new LiteralControl("<br />"));
Page.Form.Controls.Add(new LiteralControl(Environment.NewLine));
}
}
}
Date :
2010-03-12 11:00:36
By :
tungman
Load balance : Server 02