JS点击图片后显示验证码 如何实现?

JavaScript06

JS点击图片后显示验证码 如何实现?,第1张

最简单的方法你把图一的显示验证码也弄成一个图片,比如叫code.png,上面你的代码就能换成

<img src="code.png" onclick="this.src ={$maccms.path_tpl}picture/captcha.png"

<script language="JavaScript">

function reloadcode(){

var verify=document.getElementById('safecode')

verify.setAttribute('src','images/chknumber.jsp?'+Math.random())

//这里必须加入随机数不然地址相同我发重新加载

}

</script>

=========================

然后再验证码图片里面写onclick呼出上面的函数重新加载.

程序代码

<img src="images/chknumber.jsp"id="safecode" border="0" onclick="reloadcode()" style="cursor:handpadding:2px 8px 0pt 3px" />

js代码

//**********获取验证码图片*********************************************************//

function getcodeimg()

{

var num = Math.ceil(Math.random()*100)

document.getElementById("codeimg").src = "VerifyCode.aspx?Num="+num

}

这里codeimg是网页上验证码图片的id。如下:

<img id="codeimg" alt="看不清楚请点击图片!" src="VerifyCode.aspx" onclick="getcodeimg()"/>

//*********************************************************************************//

建立一个单独生成验证码aspx页面,后台代码如下:

using System

using System.Collections

using System.ComponentModel

using System.Data

using System.Web

using System.Web.SessionState

using System.Web.UI

using System.Web.UI.WebControls

using System.Web.UI.HtmlControls

using System.Drawing

using System.Drawing.Imaging

using System.Drawing.Text

/// <summary>

/// 页面验证码程序

/// 使用:在页面中加入HTML代码 <img src="VerifyCode.aspx">

/// </summary>

public partial class VerifyCode : System.Web.UI.Page

{

static string[] FontItems = new string[] { "Arial",

"Helvetica",

"Geneva",

"sans-serif",

"Verdana"

}

static Brush[] BrushItems = new Brush[] { Brushes.OliveDrab,

Brushes.ForestGreen,

Brushes.DarkCyan,

Brushes.LightSlateGray,

Brushes.RoyalBlue,

Brushes.SlateBlue,

Brushes.DarkViolet,

Brushes.MediumVioletRed,

Brushes.IndianRed,

Brushes.Firebrick,

Brushes.Chocolate,

Brushes.Peru,

Brushes.Goldenrod

}

static string[] BrushName = new string[] {"OliveDrab",

"ForestGreen",

"DarkCyan",

"LightSlateGray",

"RoyalBlue",

"SlateBlue",

"DarkViolet",

"MediumVioletRed",

"IndianRed",

"Firebrick",

"Chocolate",

"Peru",

"Goldenrod"

}

private static Color BackColor= Color.White

private static Pen BorderColor = Pens.DarkGray

private static int Width= 58

private static int Height = 25

private Random _random

private string _code

private int_brushNameIndex

override protected void OnInit(EventArgs e)

{

//

// CODEGEN: This call is required by the ASP.NET Web Form Designer.

//

//InitializeComponent()

//base.OnInit(e)

}

/// <summary>

/// Required method for Designer support - do not modify

/// the contents of this method with the code editor.

/// </summary>

private void InitializeComponent()

{

//this.Load += new System.EventHandler(this.Page_Load)

}

/// <summary>

///

/// </summary>

/// <param name="sender"></param>

/// <param name="e"></param>

public void Page_Load(object sender, System.EventArgs e)

{

if (!IsPostBack)

{

//

// TODO : initialize

//

this._random = new Random()

this._code = GetRandomCode()

//

// TODO : use Session["code"] save the VerifyCode

//

Session["code"] = this._code

//

// TODO : output Image

//

this.SetPageNoCache()

this.OnPaint()

}

}

/// <summary>

/// 设置页面不被缓存

/// </summary>

private void SetPageNoCache()

{

Response.Buffer = true

Response.ExpiresAbsolute = System.DateTime.Now.AddSeconds(-1)

Response.Expires = 0

Response.CacheControl = "no-cache"

Response.AppendHeader("Pragma","No-Cache")

}

/// <summary>

/// 取得一个 4 位的随机码

/// </summary>

/// <returns></returns>

private string GetRandomCode()

{

return Guid.NewGuid().ToString().Substring(0, 4)

}

/// <summary>

/// 随机取一个字体

/// </summary>

/// <returns></returns>

private Font GetFont()

{

int fontIndex = _random.Next(0, FontItems.Length)

FontStyle fontStyle = GetFontStyle(_random.Next(0, 2))

return new Font(FontItems[fontIndex], 12, fontStyle)

}

/// <summary>

/// 取一个字体的样式

/// </summary>

/// <param name="index"></param>

/// <returns></returns>

private FontStyle GetFontStyle(int index)

{

switch (index)

{

case 0:

return FontStyle.Bold

case 1:

return FontStyle.Italic

default:

return FontStyle.Regular

}

}

/// <summary>

/// 随机取一个笔刷

/// </summary>

/// <returns></returns>

private Brush GetBrush()

{

int brushIndex = _random.Next(0, BrushItems.Length)

_brushNameIndex = brushIndex

return BrushItems[brushIndex]

}

/// <summary>

/// 绘画事件

/// </summary>

private void OnPaint()

{

Bitmap objBitmap = null

Graphics g = null

try

{

objBitmap = new Bitmap(Width, Height)

g = Graphics.FromImage(objBitmap)

Paint_Background(g)

Paint_Text(g)

Paint_TextStain(objBitmap)

Paint_Border(g)

objBitmap.Save(Response.OutputStream, ImageFormat.Gif)

Response.ContentType = "image/gif"

}

catch{}

finally

{

if (null != objBitmap)

objBitmap.Dispose()

if (null != g)

g.Dispose()

}

}

/// <summary>

/// 绘画背景颜色

/// </summary>

/// <param name="g"></param>

private void Paint_Background(Graphics g)

{

g.Clear(BackColor)

}

/// <summary>

/// 绘画边框

/// </summary>

/// <param name="g"></param>

private void Paint_Border(Graphics g)

{

g.DrawRectangle(BorderColor, 0, 0, Width - 1, Height - 1)

}

/// <summary>

/// 绘画文字

/// </summary>

/// <param name="g"></param>

private void Paint_Text(Graphics g)

{

g.DrawString(_code, GetFont(), GetBrush(), 3, 1)

}

/// <summary>

/// 绘画文字噪音点

/// </summary>

/// <param name="g"></param>

private void Paint_TextStain(Bitmap b)

{

for (int n=0n<30n++)

{

int x = _random.Next(Width)

int y = _random.Next(Height)

b.SetPixel(x, y, Color.FromName(BrushName[_brushNameIndex]))

}

}

}