今天,我们开始修改JS代码了,可惜我的正则不好,不能有很大改动,只好一点点来了。废话不说,开工:
=====================以下为双鱼编辑器中Code.js文件的代码修改=================
1、双鱼编辑器本身对代码的空格支持不够好,因此我在“str = "<div style=\""+CodeDivStyle+"\">" + str + "</div>"; “后面加了一句(也一定要在这句之后):
str = str.replace(/\s{2}/g," ");
意思是替换连续2个空格(不能为一个,否则会把不该替换的也替换)为可显示的HTML代码” ”,这样,代码各行之前就和原代码一样,会有空格,代码看起来更加清晰。
2、格式化VBScript代码函数中,少了一些关键字,我们再加一些,查找“|While|With|Xor”,
在它之后加上:“|Sub|Len|Right|Function|IsNull|IsEmpty|Left|Cint|Instr|Cstr|Replace|Chr|Error|Trim
|Mid|Instrrev|LCase|UCase|Hex”诶呀,累了,不知道还有些什么,没加上的各位朋友自己加吧,头疼。
3、格式化SQL,有待高手来解决,,还有好多没改,目前就修改下注释,变为绿色;
搜索“str = str.replace(/([%\^\*\(\)\-\+=|\/,\.~])/gi,"<font color=\"#999999\">$1</font>");”
把它和它下面一行都删除,之后在函数最后一行 “return (str); ”的前面加上:
“str = FortmatCodeRemark_SQL(str);”
现在写FortmatCodeRemark_SQL函数:
//SQL注释替换为绿色
function FortmatCodeRemark_SQL(str)
{
str = str.replace(/(\/\*)([\s\S]*?)(\*\/)/g,
function() {
var s = arguments[1];
if (arguments[2] != "")
s = "<font style=\"color:#008080\">"+s+ClearColorTag(arguments[2])+arguments[3]+"</font>";
else
s += arguments[3];
return(s);
});
str = str.replace(/([^\-])(\-{2})(.*)/g,
function() {
var s;
if (arguments[3].substr(0,1) != "")
s = "<font style=\"color:#008080\">"+arguments[2]+ClearColorTag(arguments[3])+"</font>";
else
s = arguments[2]+arguments[3];
return(arguments[1]+s);
});
return(str);
}
搜索“str = str.replace(/(N)('.*?')/gi,
function() {
return (arguments[1]+"<font color=\"#FF0000\">"+arguments[2].replace(/<.*?>/g,"")+"</font>");
});”
更改为:“str = str.replace(/('.*?')/gi,
function() {
return ("<font color=\"#FF0000\">"+arguments[1].replace(/<.*?>/g,"")+"</font>");
});”
函数解决了注释为绿色,但是又把特殊符号变为灰色的功能取消了。。还不知道怎么解决。
4、搜索“// 双引号中关键字不变色”,把下面一段函数删除,正则有问题,会捣乱格式。
后面会加个函数,在各个格式化函数中调用。
// 双引号中关键字不变色
str = str.replace(/(")([\s\S]*?)\1/g,
function() {
return(arguments[1]+arguments[2].replace(/(<[\s\S]*?>)/g,"")+arguments[1]);
});
5、搜索“// str = FormatBrace(str);”,把前面的斜杆删除,并把它的下面一句:
“str = FormatValue(str);”放到函数最前面(防止把注释里的双引号中值颜色也变棕色)
6、新增函数:替换收缩图片;在格式化c#,vb.net,vbscript,jscript中相应地方添加该函数。
7、新增函数:双引号中关键字不变色;加在各格式化函数中。
8、增加个VB.NET格式化:
搜索“case "SQL": str = FormatSQL(str,canCollapse); break;”,在其后加上:
“case "VB.NET": str = FormatVBDOTNET(str,canCollapse); break;”
9、更改vbscript,jscript,加上折叠功能。
(以上6-9步代码较多,这里不放出,有兴趣的可以查看code.js。都有详细注释。)
终于,铁棒被我们磨成针了,现在,我们可以真正的使用插入代码功能,试一试,恩。感觉蛮好!上面的代码看着麻烦,,想研究的朋友可以看看,主要做个参考,我更改了什么。方便朋友们以后对这功能的增强。
好了,下面是源码的下载:
我的FCKeditor(经过精简,删除垃圾文件,保留全部功能,版本为2.4.1,已加入插入代码功能)
FCKeditor2.4.1.rar
插入代码时所更改的文件:(有自己FCKeditor的朋友可以直接下载覆盖)
Fckeditor.rar
--------by:
zss1100
2007.6.18
posted @ 2007-06-18 18:49 打你鸟鸟头 阅读(1023) 评论(2)
编辑
在此文开始之前,本人用了一天时间研究了在FCKeditor中添加自定义工具栏(咋感觉自己比较笨呢?)。之前,网上有很多人也在找这样的资料,但是都没有详细说明。终于,偶然情况下,发现了两位高人的BLOG中有提及怎样添加自定义工具栏,但是没有插入代码这功能的代码。不过,站在巨人肩膀上就是爽啊,慢慢改。
文章开始前,把两位达人的BLOG先发出来:
清清泡泡:http://j2ee.blog.sohu.com/36813753.html(详细讲解了如何添加自定义工具栏,可是很多都是不需要的步骤)
幻想曲:http://www.lemongtree.com/Archives/fckedit_toolbar.aspx
http://www.lemongtree.com/Archives/fckeditor_toolbar_2.aspx(只给了源码没说明,= =!源码地址在16楼的回复里)
另外,插入代码功能的JS脚本是用了 月伤 melody 制作的双鱼文本编辑器 PiscesTextEditor V1.0中的脚本,要特别感谢!
作品链接:http://www.2fstory.net/blog/View.aspx?blogID=47
首先,打开fckeditor下的fckconfig.js文件,找到FCKConfig.ToolbarSets["Default"]和FCKConfig.ContextMenu 在他们后面加上”InsertCode”,这个当然是自己要添加的工具栏的名字了。然后,我们在“fckeditor\editor\lang\”文件夹下找到zh-cn.js,在最后一行后面加上以下2句:
//自定义
InsertCode:"插入代码",
InsertCodeProp:"插入代码属性"
注意在这2句前DlgAboutInfo : "要获得更多信息请访问 "后面加个逗号。当然,还可以同样方法修改其他语言js文件,我就修改了繁体的zh.js和英文的en.js
现在,我们已经定义了工具栏,开始第二大步,打开“fckeditor\editor\js\”下的fckeditorcode_gecko.js和fckeditorcode_ie.js,我们开始注册工具栏;
第一步:在2个文件中搜索“InsertHorizontalRule”,在后面加上“InsertCode”。
第二步:同样在2个文件中搜索“default:if (FCKRegexLib”,在“default”之前加上这么一句:
Case 'InsertCode':B = new FCKDialogCommand('InsertCode' , FCKLang.InsertCode ,'dialog/InsertCode/InsertCode.htm',510,450);break;
这句话意思就是,点击工具栏图标时打开InsertCode.htm文件,定义了高和宽,至于文件内容我们之后再说。
第三步:还是在这2个文件,搜索“default:alert(FCKLang.UnknownToolbarItem”,在“default”之前加上下面一句:
case 'InsertCode':B = new FCKToolbarButton('InsertCode' , FCKLang.InsertCode,null,null,null,null,67);
这句话意思是定义了工具栏的图标,FCKeditor的默认图标文件是“fckeditor\editor\skins\default\”下的fck_strip.gif图片,本人由于不想用重复的默认图标,因此加了一个小图片:
(20*20)
默认图片是16*2056,用PS把画布加长到16*2072,再把自己的小图片放到最下面,这样,自定义的图片刚好排67位。以后加新功能还可以依次增加此图片。
好了。经过这么3步,我们已经把自定义工具栏加上去了。(在about之后,如果想加在中间,可以在刚才的第二和第三步里把添加的语句加到相应的Case前面。)
做了这么多,任务算完成1/3,加油!
下面我们开始定义“InsertCode.htm”文件:
在“fckeditor\editor\dialog\”下新增InsertCode文件夹,新建HTM文件InsertCode.htm,里面代码先拷贝“fckeditor\editor\dialog\fck_textfield.html”文件,好了,,大手术开始:
首先,在“<title></title>”中加上“Insert Code Properties”,这个是打开的新窗体的标题;更改FCKeditor的JS文件“common/fck_dialog_common.js”的引用为“../common/fck_dialog_common.js”,再加上双鱼编辑器里的插入代码脚本“<script src="code.js" type="text/javascript"></script>”。
然后更改“window.onload = function()”函数,把里面的if {} else{}删除掉,再把function Ok()里的代码全部删除,加上下面2句:
oEditor.FCK.InsertHtml(code()) ;
window.parent.Cancel() ;
因为我们是更改成代码格式的字符串加到FCKeditor编辑器里,所以用到内置的InsertHtml函数,code()函数传过来的是字符串;至于下面的html代码,就更改为双鱼编辑器里InsertCode.htm的代码(这里就不提供了,本人把更改好的放上来,这里只做个简单说明)。
下面我们修改“code.js”文件里的代码,把“function code()”里的
window.returnValue = FormateCode(str,language,showLine,canCollapse,canAllCollapse,allRegion);
window.close();
这两句更改为一句:
return FormateCode(str,language,showLine,canCollapse,canAllCollapse,allRegion);
好了,至此,就可以使用插入代码功能了。(添加其他功能的时候到这一步就可以完成了。)
完成后的编辑器图片:

看见最后一个图片没,这就是了,点击后出现的图形为:

嘿,兴冲冲地试了下,诶呀,怎么代码前这么多红XX呢?看下源代码,原来里面的折叠图片路径全是错的,这下郁闷了,试了N种方法,都没用。无奈,最后查看FCKeditor中其他的htm文件,发现个东东:FCKConfig.BasePath,作用是取得editor文件夹的相对路径,例如我的例子就是:“/AJAXEnabledWebSite1/FCKeditor/editor/”。好了,那现在为了得到我们存放折叠图片的文件夹路径,我们现在要定义一个变量,打开fckconfig.js文件,在文件最后一行之后加上这么一句:
FCKConfig.CodePath = FCKConfig.BasePath + 'dialog/InsertCode/codeimages/' ;
有了图片路径之后,我们的继续修改“code.js”文件:
首先,在“function code()”前面加上下面3句:
var oEditor = window.parent.InnerDialogLoaded() ;
var FCKConfig = oEditor.FCKConfig ;
var CodeImagePath = FCKConfig.CodePath ;//得到图片所在文件夹路径
搜索“PiscesTextEditor/codeimages/”,全部替换为“”(即,全部删除。注意:是空,不是空格;)
同样搜索“PiscesTextEditor\/codeimages\/”,全部替换为“”
替换好之后,我们就要用到上面的图片所在文件夹路径了,我们这里使用正则替换字符串。
搜索“if (showLine) str = AddLineNumber(str); ”,在它前面加上下面2句:
var src = /\b(src=")\b/g;
str = str.replace(src,'src="'+CodeImagePath);//得到正确路径
意思就是,把所有img控件的只有图片名的src路径替换为正确的相对路径。
好了。。修改就到这里,不过,还只是完成了95%,为什么呢,仔细试了下,双鱼编辑器的插入代码功能还有好多BUG。喜欢看下去的朋友继续看,不喜欢的可以直接下载我的文件了。
今天到此为止,明天我们继续,修改Code.js文件,减少点BUG,源码明天提供。
posted @ 2007-06-17 22:31 打你鸟鸟头 阅读(2425) 评论(12)
编辑
在 SQL语句参数化(1)插入数据 中,介绍了一般的参数化方法,同理可以应用一些到修改,查询,删除等操作中
下面介绍在DATAGRID等的绑定数据源时的参数化
WebForm1.aspx.vb
Imports System.Text
Public Class WebForm1
Inherits System.Web.UI.Page
#Region " Web 窗体设计器生成的代码 "
'该调用是 Web 窗体设计器所必需的。
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
End Sub
Protected WithEvents TextBox1 As System.Web.UI.WebControls.TextBox
Protected WithEvents Button1 As System.Web.UI.WebControls.Button
Protected WithEvents DataGrid1 As System.Web.UI.WebControls.DataGrid
'注意: 以下占位符声明是 Web 窗体设计器所必需的。
'不要删除或移动它。
Private designerPlaceholderDeclaration As System.Object
Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
'CODEGEN: 此方法调用是 Web 窗体设计器所必需的
'不要使用代码编辑器修改它。
InitializeComponent()
End Sub
#End Region
Dim myconn As New Conn
Dim mydata As New Getdata
Dim sql As StringBuilder = New StringBuilder
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
mydata.myconn = New SqlClient.SqlConnection
mydata.myconn.ConnectionString = myconn.stringconnection
If Not Page.IsPostBack Then
End If
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
sql.Append("select chanpin_id,chanpin_name,chanpin_xiaotu,chanpin_putongjia")
sql.Append(" from chanpin where ")
sql.Append(" chanpin_name=@chanpin_name")
' sql.Append("select chanpin_id,chanpin_name,chanpin_xiaotu,chanpin_putongjia")
' sql.Append(" from chanpin where ")
' sql.Append(" chanpin_name like '%'+ @chanpin_name +'%'") ' 用LIKE时,一定要用+号不能用&,+号之前为’(单引号)而不是“
Dim mypt As SqlClient.SqlParameter() = New SqlClient.SqlParameter() { _
New SqlClient.SqlParameter("@chanpin_name", SqlDbType.VarChar, 50)}
mypt(0).Value = TextBox1.Text
DataGrid1.DataSource = mydata.getdataview(sql.ToString, "chanpin", mypt)
DataGrid1.DataBind()
End Sub
End Class
Getdata.vb
Public Class Getdata
Public myconn As SqlClient.SqlConnection
Public Function getdataview(ByVal sql As String, ByVal strTable As String, ByVal myPt As SqlClient.SqlParameter()) As DataView
Dim myDataAdapter As SqlClient.SqlDataAdapter
Dim myDataSet As DataSet
myDataAdapter = New SqlClient.SqlDataAdapter(sql, myconn)
If Not IsNothing(myPt) Then
Dim mypt1 As SqlClient.SqlParameter
For Each mypt1 In myPt
myDataAdapter.SelectCommand.Parameters.Add(mypt1)
Next
End If
myDataSet = New DataSet
myDataAdapter.Fill(myDataSet, strTable)
Dim myTable As DataTable = myDataSet.Tables(strTable)
getdataview = New DataView(myTable)
End Function
End Class
posted @ 2007-03-04 15:46 打你鸟鸟头 阅读(257) 评论(0)
编辑
WebForm1.aspx.vb
Imports System.Text
Public Class WebForm1
Inherits System.Web.UI.Page
#Region " Web 窗体设计器生成的代码 "
'该调用是 Web 窗体设计器所必需的。
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
End Sub
Protected WithEvents TextBox1 As System.Web.UI.WebControls.TextBox
Protected WithEvents TextBox2 As System.Web.UI.WebControls.TextBox
Protected WithEvents TextBox3 As System.Web.UI.WebControls.TextBox
Protected WithEvents TextBox4 As System.Web.UI.WebControls.TextBox
Protected WithEvents TextBox5 As System.Web.UI.WebControls.TextBox
Protected WithEvents TextBox6 As System.Web.UI.WebControls.TextBox
Protected WithEvents Button1 As System.Web.UI.WebControls.Button
'注意: 以下占位符声明是 Web 窗体设计器所必需的。
'不要删除或移动它。
Private designerPlaceholderDeclaration As System.Object
Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
'CODEGEN: 此方法调用是 Web 窗体设计器所必需的
'不要使用代码编辑器修改它。
InitializeComponent()
End Sub
#End Region
Dim myconn As New Conn
Dim mydata As New Getdata
Dim sql As StringBuilder = New StringBuilder
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
mydata.myconn = New SqlClient.SqlConnection
mydata.myconn.ConnectionString = myconn.stringconnection
If Not Page.IsPostBack Then
End If
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
sql.Append("insert into chanpin(")
sql.Append("chanpin_name,chanpin_bianhao,chanpin_xiaotu,chanpin_putongjia,chanpin_kucun,chanpin_xiangxi")
sql.Append(")")
sql.Append(" values(")
sql.Append("@chanpin_name,@chanpin_bianhao,@chanpin_xiaotu,@chanpin_putongjia,@chanpin_kucun,@chanpin_xiangxi")
sql.Append(")")
Dim mypt As SqlClient.SqlParameter() = New SqlClient.SqlParameter() { _
New SqlClient.SqlParameter("@chanpin_name", SqlDbType.VarChar, 50), _
New SqlClient.SqlParameter("@chanpin_bianhao", SqlDbType.VarChar, 50), _
New SqlClient.SqlParameter("@chanpin_xiaotu", SqlDbType.VarChar, 1000), _
New SqlClient.SqlParameter("@chanpin_putongjia", SqlDbType.Decimal, 9), _
New SqlClient.SqlParameter("@chanpin_kucun", SqlDbType.Int, 4), _
New SqlClient.SqlParameter("@chanpin_xiangxi", SqlDbType.Text)}
mypt(0).Value = TextBox1.Text
mypt(1).Value = TextBox2.Text
mypt(2).Value = TextBox3.Text
mypt(3).Value = TextBox4.Text
mypt(4).Value = TextBox5.Text
mypt(5).Value = TextBox6.Text
mydata.myconn.Open()
mydata.executesql(sql.ToString, mypt)
' mydata.executesql(sql.ToString, Nothing) '不需要用到参数时,传nothing
mydata.myconn.Close()
End Sub
End Class
Getdata.vb
Public Class Getdata
Public myconn As SqlClient.SqlConnection
Public Function executesql(ByVal sql As String, ByVal myPt As SqlClient.SqlParameter())
Dim myCmd As SqlClient.SqlCommand
myCmd = New SqlClient.SqlCommand(sql, myconn) ' 存储过程时sql应改为存储过程名
' myCmd.CommandType = CommandType.StoredProcedure ' 存储过程时需要添加该语句
If IsNothing(myPt) Then
myCmd.ExecuteNonQuery()
Else
Dim mypt1 As SqlClient.SqlParameter
For Each mypt1 In myPt
myCmd.Parameters.Add(mypt1)
Next
myCmd.ExecuteNonQuery()
myCmd.Parameters.Clear()
End If
End Function
End Class
posted @ 2007-03-04 15:45 打你鸟鸟头 阅读(341) 评论(0)
编辑
曾经为没有vb.net版支付宝接口程序郁闷过很长一段时间,终于忍不住修改 了一下
其主要的3个文件修改为vb.net很容易,直接给出:alipay.rar
下面是接口代码的参数说明:
Private Sub ImageButton1_Click(ByVal sender As System.Object, ByVal e As System.Web.UI.ImageClickEventArgs) Handles ImageButton1.Click
' '按时构造订单号
Dim currentTime As System.DateTime = New System.DateTime
currentTime = System.DateTime.Now
Dim out_trade_no As String
out_trade_no = currentTime.ToString("g")
out_trade_no = out_trade_no.Replace("-", "")
out_trade_no = out_trade_no.Replace(":", "")
out_trade_no = out_trade_no.Replace(" ", "")
'业务参数赋值
Dim gateway As String = "https://www.alipay.com/cooperate/gateway.do?" '支付接口
Dim service As String = "trade_create_by_buyer" '服务参数
Dim sign_type As String = "MD5"
Dim subject, body As String
body = ""
sql = "select cp_name from chanpin where cp_id="& cint(label2.text)
getdata.myconn.Open()
reader = getdata.getdatareader(sql)
While reader.Read
subject = reader.Item(0) '商品名称
body = body & " " & reader.Item(0) '商品描述 ,不能有太多字符
End While
reader.Close()
Dim quantity As String
quantity = "1" '商品数量
Dim payment_type As String
payment_type = "1" '支付类型'1=商品购买,2=服务购买,3=网络拍卖,4=捐赠,5=邮费补偿,6=奖金
Dim price As String
sql = "select cp_money from chanpin where cp_id="& cint(label1.text)
reader = getdata.getdatareader(sql)
If reader.Read Then
price = reader.Item(0) '商品价格
End If
reader.Close()
getdata.myconn.Close()
Dim show_url, seller_email, key, partner As String
show_url = "http://****" '商品描述地址
seller_email = *** '您的支付宝认证Email,必须通过支付宝认证才可以
key = *** '安全校验码,在支付宝网站“商家工具”那里可以获得
partner = *** 'partner合作伙伴ID
Dim return_url As String = "Alipay_Return.aspx" '服务器通知返回接口
Dim notify_url As String = "Alipay_Notify.aspx" '服务器通知接口
Dim _input_charset As String = "utf-8" '服务器编码
Dim logistics_type As String = "POST"
Dim logistics_fee As String = "0" '平邮费 包含在价格中
Dim logistics_fee_1 As String = "0" '快递费 包含在价格中
Dim logistics_payment As String = "BUYER_PAY"
Dim logistics_type_1 As String = "EXPRESS"
Dim logistics_payment_1 As String = "BUYER_PAY"
Dim ap As AliPay = New AliPay
Dim aliay_url As String = ap.CreatUrl(gateway, service, partner, sign_type, out_trade_no, subject, body, payment_type, price, show_url, seller_email, key, return_url, _input_charset, notify_url, logistics_type, logistics_fee, logistics_payment, logistics_type_1, logistics_fee_1, logistics_payment_1, quantity)
Response.Redirect(aliay_url)
End Sub
posted @ 2007-03-04 15:45 打你鸟鸟头 阅读(399) 评论(0)
编辑
Public Class getdata
Public Shared myconn As SqlClient.SqlConnection
Public Shared Function getdatareader(ByVal sql As String) As SqlClient.SqlDataReader
Dim myCmd As SqlClient.SqlCommand
myCmd = New SqlClient.SqlCommand(sql, myconn)
getdatareader = myCmd.ExecuteReader()
End Function
Public Shared Function executesql(ByVal sql As String)
Dim myCmd As SqlClient.SqlCommand
myCmd = New SqlClient.SqlCommand(sql, myconn)
myCmd.ExecuteNonQuery()
End Function
Public Shared Function getdataview(ByVal sql As String, ByVal strTable As String) As DataView
Dim myDataAdapter As SqlClient.SqlDataAdapter
Dim myDataSet As DataSet
myDataAdapter = New SqlClient.SqlDataAdapter(sql, myconn)
myDataSet = New DataSet
myDataAdapter.Fill(myDataSet, strTable)
Dim myTable As DataTable = myDataSet.Tables(strTable)
getdataview = New DataView(myTable)
End Function
End Class
调用
getdata.myconn = New SqlClient.SqlConnection
getdata.myconn.ConnectionString = (xinxi.stringconnection)
posted @ 2007-03-04 15:42 打你鸟鸟头 阅读(84) 评论(0)
编辑
在用到时间验证时,后台验证会浪费服务器资源,用户也会有等待,
因此想到用自定义验证控件,下面放入了一些经常用的时间运算
由于客户端验证控件不允许前台修改错误信息,所以用个td来代替。
为了防止空格和无内容时也会抖动,td在无错误时加入文字
同时,此例中的送花日期TextBox6用到了梅花雪的日历控件。
因为日期型数据默认读取的日期为yyyy-M-d型,梅花雪控件日期形式为yyyy-MM-dd型,所以都需要转换为yyyy-MM-dd型
compearday中的compdt3为后台设置的订单支持上限日期
<SCRIPT language="JavaScript">
<!--
function compearday(source,value)
{
var compdt1 = new Date();
compdt1=document.getElementById("TextBox6").value;
var year = new Date().getYear();
var month = new Date().getMonth()+1;
var day = new Date().getDate();
if(month<10)month="0"+month;
if(day<10)day="0"+day;
var compdt2 = year+'-'+month+'-'+day;//今天
//execScript('monthafter = DateAdd("M", 1, date())','vbscript'); //一个月后今天//得到的是UTC日期格式
//var s=new Date(monthafter);
//function appendZero(s){return ("00"+s).substr((""+s).length);}
//var compdt3 = s.getFullYear() + "-" + appendZero(s.getMonth()+1) + "-" + appendZero(s.getDate());//转换格式yyyy-MM-dd
var compdt3 = new Date();//天数上限日期
compdt3=document.getElementById("texth").value;
if(compdt1<compdt2||compdt1>compdt3)//小于今天或者大于上限日期
value.IsValid = false;
else
value.IsValid = true;
}
//-->
function compeartime(source,value)
{
var compdt1;
compdt1=document.getElementsByName("RadioButtonList2");
for(i=0;i<compdt1.length;i++)
{
if(eval('document.all.RadioButtonList2_' + i).checked)
{
var str;
var now=new Date();
var s=new Date(now);
function appendZero(s)
{
return ("00"+s).substr((""+s).length);
}
//var compdt2 = s.getFullYear() + "年" + appendZero(s.getMonth()+1) + "月" + appendZero(s.getDate()) + "日 " + appendZero(s.getHours()) + ":" + appendZero(s.getMinutes()) + ":" + appendZero(s.getSeconds());
var compdt2 = new Date().getYear() + "年" + (new Date().getMonth()+1) + "月" + new Date().getDate() + "日 " + appendZero(s.getHours()) + ":" + appendZero(s.getMinutes()) + ":" + appendZero(s.getSeconds());
//var compdt3 = s.getFullYear() + "年" + appendZero(s.getMonth()+1) + "月" + appendZero(s.getDate()) + "日 "
var compdt3 = new Date().getYear() + "年" + (new Date().getMonth()+1) + "月" + new Date().getDate() + "日 "
var compdt4 = s.getFullYear() + "-" + appendZero(s.getMonth()+1) + "-" + appendZero(s.getDate());//今天
var compdt5 = document.getElementById("TextBox6").value;
if(compdt4==compdt5)//如果选择的是今天送花
{
if(AddHours(3)>(compdt3 +"21:00:00"))//现在时间+3小时大于今天的21点
{
value.IsValid = false;
str='<font color=red>今天已经不够时间准备,请下明天的订单!</font>';
td1.innerHTML=str;
}
else
{
value.IsValid = true;
str="市区必须提前3小时下单,节假日除外";
td1.innerHTML=str;
if(compdt2>compdt3 + eval('document.all.RadioButtonList2_' + i).value)//现在时间大于选择的时间,时间出错
{
value.IsValid = false;
str='<font color=red>送花时间出错!</font>';
td1.innerHTML=str;
}
else
{
value.IsValid = true;
str="市区必须提前3小时下单,节假日除外";
td1.innerHTML=str;
if(AddHours(3)>compdt3 + eval('document.all.RadioButtonList2_' + i).value)//现在时间3小时后大于选择的时间,来不及准备
{
value.IsValid = false;
str='<font color=red>时间来不及准备,请选择下一个时间段!</font>';
td1.innerHTML=str;
}
else
{
value.IsValid = true;
str="市区必须提前3小时下单,节假日除外";
td1.innerHTML=str;
}
}
}
}
else
{
value.IsValid = true;
str="市区必须提前3小时下单,节假日除外";
td1.innerHTML=str;
}
}
}return false;
}
function AddHours(hourvalue) //现在时间+N=N几小时后时间
{
HoursToAdd=hourvalue;
var newdate=new Date();
var newtimems=newdate.getTime()+(HoursToAdd*60*60*1000);
newdate.setTime(newtimems);
return newdate.toLocaleString();
}
</script>
<tr bgColor="#ffffff">
<td class="table-xia" style="BORDER-RIGHT: #cccccc 1px solid; BORDER-TOP: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; BORDER-BOTTOM: #cccccc 1px solid"
align="right" width="30%" height="30"><input type="hidden" runat="server" id="texth" style="WIDTH: 32px; HEIGHT: 22px" size="1">要求<font color="red">送花时间</font>:
</td>
<td class="table-xia" style="BORDER-RIGHT: #cccccc 1px solid; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 20px; BORDER-LEFT: #cccccc 1px solid; BORDER-BOTTOM: #cccccc 1px solid"
width="70%" colSpan="2" height="30"><asp:textbox id="TextBox6" onfocus="calendar()" runat="server"></asp:textbox> <FONT color="#ff0000">**
<asp:requiredfieldvalidator id="RequiredFieldValidator5" runat="server" ErrorMessage="必填" ControlToValidate="TextBox6"></asp:requiredfieldvalidator><asp:customvalidator id="CustomValidator1" runat="server" ControlToValidate="TextBox6" ClientValidationFunction="compearday"></asp:customvalidator></FONT></td>
</tr>
<tr bgColor="#ffffff">
<td class="table-xia" style="BORDER-RIGHT: #cccccc 1px solid; BORDER-TOP: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; BORDER-BOTTOM: #cccccc 1px solid"
align="right" width="30%" height="30">如有特殊要求或不在上述时间段请电话联系本公司<asp:customvalidator id="Customvalidator3" runat="server" ClientValidationFunction="compeartime" ControlToValidate="RadioButtonList2"></asp:customvalidator></td>
<td class="table-xia" style="BORDER-RIGHT: #cccccc 1px solid; BORDER-TOP: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; BORDER-BOTTOM: #cccccc 1px solid"
width="70%" colSpan="2" height="30">
<table cellSpacing="0" cellPadding="0" width="100%" border="0">
<TBODY>
<tr>
<td><asp:radiobuttonlist id="RadioButtonList2" runat="server" RepeatDirection="Horizontal" RepeatColumns="6">
<asp:ListItem Value="10:00:00">8:00-10:00</asp:ListItem>
<asp:ListItem Value="13:00:00">10:00-13:00</asp:ListItem>
<asp:ListItem Value="18:00:00">14:00-18:00</asp:ListItem>
<asp:ListItem Value="21:00:00" Selected="True">21:00前</asp:ListItem>
</asp:radiobuttonlist></td>
</tr>
<TR>
<td id="td1" height="16">市区必须提前3小时下单,节假日除外</td>
</TR>
</TBODY>
</table>
</td>
</tr>
posted @ 2007-03-04 15:41 打你鸟鸟头 阅读(1189) 评论(0)
编辑
在编程过程中,经常遇到一个页面有许多按钮
在文本框中输入内容后习惯性按回车,总是提交第一个按钮,有了下面这函数就好办了
<SCRIPT language="JavaScript">
<!--
function EnterKey(ButtonId)
{
if(event.keyCode==13)
{
document.all(ButtonId).focus();
}
}
//-->
</SCRIPT>
在需要控制的按钮所在table中放入 onkeydown="EnterKey('Button1')"
posted @ 2007-03-04 15:39 打你鸟鸟头 阅读(2315) 评论(0)
编辑
function CheckAll()
{
var AllCKBox = document.getElementsByTagName("input");
var CKBox1 = document.getElementById("CheckBox1");
if(CKBox1.checked==true){
for (var i=0; i<AllCKBox.length; i++)
if (AllCKBox[i].type == "checkbox") AllCKBox[i].checked = true;
}
else
{
for (var i=0; i<allcheckbox.length; i++)
if (AllCKBox[i].type == "checkbox") AllCKBox[i].checked = false;
}
}
<asp:CheckBox id="CheckBox1" runat="server" onclick="CheckAll()"></asp:CheckBox>
posted @ 2007-03-04 15:31 打你鸟鸟头 阅读(199) 评论(1)
编辑