2009年9月11日

阻止事件冒泡和浏览器默认行为

<script type="text/javascript">
    /*---------------------------
    功能:停止事件冒泡
    ---------------------------*/
    function stopBubble(e) {
        //如果提供了事件对象,则这是一个非IE浏览器
        if (e && e.stopPropagation)
        //因此它支持W3C的stopPropagation()方法
            e.stopPropagation();
        else
        //否则,我们需要使用IE的方式来取消事件冒泡
            window.event.cancelBubble = true;
    }
    //阻止浏览器的默认行为
    function stopDefault(e) {
        //阻止默认浏览器动作(W3C)
        if (e && e.preventDefault)
            e.preventDefault();
        //IE中阻止函数器默认动作的方式
        else
            window.event.returnValue = false;
        return false;
    }
</script>

posted @ 2009-09-11 13:23 Lionheart Zhang 阅读(116) 评论(0) 编辑

2009年8月23日

常用的link ref

favicon.ico:
<link rel="shortcut icon" type="image/x-icon" href="/favicon.ico" />
<link rel="icon" type="image/x-icon" href="/favicon.ico" />
制作favicon

RSS:
<link rel="alternate" type="application/rss+xml" title="RSS名称" href="/rss.xml" />
RSS2.0格式请参见这里
Atom1.0格式请参见这里

OpenSearch:
<link rel="search" type="application/opensearchdescription+xml" title="引擎名称" href="/opensearch.xml"/>

opensearch.xml的格式:

<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/"
                       xmlns:moz="http://www.mozilla.org/2006/browser/search/">
<ShortName>引擎名稱</ShortName>
<Description>引擎描述</Description>
<InputEncoding>編碼方式</InputEncoding>
<Image width="16" height="16">data:image/x-icon;base64,圖示資料</Image>
<Url type="text/html" method="參數傳送方式" template="搜尋 URL">
  <Param name="參數 1" value="參數 1 之值"/>
  ...
  <Param name="參數 N" value="參數 N 之值"/>
</Url>
<Url type="application/x-suggestions+json" template="搜尋建議URL"/>
<moz:SearchForm>搜尋表單 URL</moz:SearchForm>
</OpenSearchDescription>

图片编码工具
更详细的OpenSearch参见这里

PS:如果按照固定格式将这些文件放在网站根目录里,有些浏览器是可以自动识别的。

posted @ 2009-08-23 04:24 Lionheart Zhang 阅读(173) 评论(0) 编辑

2009年8月17日

正则表达式的正向预查

匹配一段字符串比如123S456E789中的456,通常写法就是S\d+E,这样取到以后还得再去除前面的S和后面的E。使用正向预查,可以写成(?<=S)\w+(?=E),这样可以直接就匹配到了456。

//正则表达式匹配
string result = Regex.Match("123S456E789", @"(?<=S)\w+(?=E)").Value;

posted @ 2009-08-17 08:53 Lionheart Zhang 阅读(125) 评论(0) 编辑

动态添加JavaScript

//在页面顶部添加脚本
if (!Page.ClientScript.IsClientScriptBlockRegistered("myscriptKey"))//判断是否已经存在相同//键值的ScriptBlock
{
    string myScript = @"function AlertHello(){alert('hello xuanhun!!');}";//脚本内容
    Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "myscriptKey", myScript, true);
}

//在页面底部添加脚本
if (!Page.ClientScript.IsStartupScriptRegistered("footscriptkey"))
{
    string CallScript = @"AlertHello();";
    Page.ClientScript.RegisterStartupScript(this.GetType(), "footscriptKey", CallScript, true);
}

// 添加对js文件的引用
if (!Page.ClientScript.IsClientScriptIncludeRegistered("incluedeKey"))
{
    string IncludeScript = @"/js/ShowHello.js";
    Page.ClientScript.RegisterClientScriptInclude("includeKey", IncludeScript);
}

posted @ 2009-08-17 08:40 Lionheart Zhang 阅读(44) 评论(0) 编辑

IE不确认关闭窗口

window.opener=null;window.close();在IE6正常,在IE7/IE8下就弹出要关闭窗口前的提示。解决方法如下:
<a href="#" onclick="window.opener=null;window.open('','_self');window.close();">不确认关闭 </a>

posted @ 2009-08-17 08:37 Lionheart Zhang 阅读(178) 评论(1) 编辑

GridView边框样式简单美化

主要就是这一句:.Grid th和.Grid td,将会给class="Grid"的table中的th和td标签应用样式,而GridView生成的HTML代码是Table,这样就解决了GridView的边框问题。
GridView添加CssClass="Grid"属性,样式表如下:

<style type="text/css">
    .Grid
    {
        border-collapse: collapse;
        border: solid 1px #93c2f1;
        width: 98%;
        font-size: 10pt;
    }
    .Grid td
    {
        border-collapse: collapse;
        border: solid 1px #93c2f1;
        font-size: 10pt;
    }
    .Grid th
    {
        border-collapse: collapse;
        border: solid 1px #93c2f1;
        font-size: 10pt;
        background-color: #e4f6ff;
    }
</style>

posted @ 2009-08-17 08:32 Lionheart Zhang 阅读(1258) 评论(0) 编辑

加入收藏夹,设为首页,火狐和IE兼容的JS

火狐浏览器(FF)不支持普通的象IE那样的加入收藏夹和设为首页,于是就找了关于FF的方法。后来测试了下,可以用了。。其代码如下:

<script type="text/javascript">
    function AddFavorite(sURL, sTitle) {
        try {
            window.external.addFavorite(sURL, sTitle);
        }
        catch (e) {
            try {
                window.sidebar.addPanel(sTitle, sURL, "");
            }
            catch (e) {
                alert("加入收藏失败,请使用Ctrl+D进行添加");
            }
        }
    }
    function SetHome(obj, vrl) {
        try {
            obj.style.behavior = 'url(#default#homepage)'; obj.setHomePage(vrl);
        }
        catch (e) {
            if (window.netscape) {
                try {
                    netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
                }
                catch (e) {
                    alert("此操作被浏览器拒绝!\n请在浏览器地址栏输入“about:config”并回车\n然后将 [signed.applets.codebase_principal_support]的值设置为'true',双击即可。");
                }
                var prefs = Components.classes['@mozilla.org/preferences-service;1'].getService(Components.interfaces.nsIPrefBranch);
                prefs.setCharPref('browser.startup.homepage', vrl);
            }
        }
    }
</script>

<a onclick="AddFavorite(window.location,document.title)">加入收藏</a>
<a onclick="SetHome(this,window.location)">设为首页</a>

posted @ 2009-08-17 08:26 Lionheart Zhang 阅读(249) 评论(0) 编辑

不改变的原有控件追加内容

追加HTML内容,我在做多文件上传的时候,用到了动态添加上传控件,但是发现一个问题,就是添加新的控件的时候,之前添加的控件的值会变空,我分析了一下原因,是因为我追加控件的时候是用的innerHTML+="内容"的,这样等于把div的控件直接重写了,所以控件会变空。
我找了下资料,知道了insertAdjacentHTML这个方法,用这个方法追加内容,不会改变原有控件的值,但是这个方法FF不使用。于是我继续找,在 http://www.cnitblog.com/yemoo/archive/2007/10/11/34711.html看到了兼容IE和FF的方法,经过试验,确实可以,但是方法太复杂了。这时,从朋友那里得到了一段JS:

function addFile() {
    var div1 = document.getElementById('divFiles');
    input1 = document.createElement("INPUT");
    input1.setAttribute("type", "file");
    input1.setAttribute("name", "File");
    div1.appendChild(input1);
    div1.appendChild(document.createElement("br"));
}

这是用DOM实现的,IE/FF都支持,要比之前的从EXTJS中提取的要精简的多。
PS:前一个方法也写出来

function insertHtml(where, el, html) {
    where = where.toLowerCase();
    if (el.insertAdjacentHTML) {
        switch (where) {
            case "beforebegin":
                el.insertAdjacentHTML('BeforeBegin', html);
                return el.previousSibling;
            case "afterbegin":
                el.insertAdjacentHTML('AfterBegin', html);
                return el.firstChild;
            case "beforeend":
                el.insertAdjacentHTML('BeforeEnd', html);
                return el.lastChild;
            case "afterend":
                el.insertAdjacentHTML('AfterEnd', html);
                return el.nextSibling;
        }
        throw 'Illegal insertion point -> "' + where + '"';
    }
    var range = el.ownerDocument.createRange();
    var frag;
    switch (where) {
        case "beforebegin":
            range.setStartBefore(el);
            frag = range.createContextualFragment(html);
            el.parentNode.insertBefore(frag, el);
            return el.previousSibling;
        case "afterbegin":
            if (el.firstChild) {
                range.setStartBefore(el.firstChild);
                frag = range.createContextualFragment(html);
                el.insertBefore(frag, el.firstChild);
                return el.firstChild;
            } else {
                el.innerHTML = html;
                return el.firstChild;
            }
        case "beforeend":
            if (el.lastChild) {
                range.setStartAfter(el.lastChild);
                frag = range.createContextualFragment(html);
                el.appendChild(frag);
                return el.lastChild;
            } else {
                el.innerHTML = html;
                return el.lastChild;
            }
        case "afterend":
            range.setStartAfter(el);
            frag = range.createContextualFragment(html);
            el.parentNode.insertBefore(frag, el.nextSibling);
            return el.nextSibling;
    }
    throw 'Illegal insertion point -> "' + where + '"';
}

posted @ 2009-08-17 08:21 Lionheart Zhang 阅读(134) 评论(2) 编辑

2009年8月12日

防止用户手动修改文本框内容的方法

今天遇到了文本框加ReadOnly属性客户端使用JS改变后程序获取不到改变后的值的问题,研究了一下,有两种简单方法解决:

1、使用input加runat="server"代替

2、使用Attribute["readonly"]="readonly"或者Attribute.Add("readonly","readonly")而不是直接使用ReadOnly=true

PS:readonly的值也可以是"true"

posted @ 2009-08-12 16:45 Lionheart Zhang 阅读(54) 评论(0) 编辑

2009年7月30日

Web页面输出Excel的数字问题解决方法

在网页格式Excel中保持数字原样显示的属性是mso-number-format: '\@',而GridView没有设置这个样式的属性,所以需要使用类选择器。输出的时候需要把样式表和GridView一起输出,所以要输出父元素:
<div id="dg" runat="server" visible="false">
    <style type="text/css">
        .num
        {
            mso-number-format: '\@';
        }
    </style>
    <asp:GridView ID="GridViewdg" runat="server" AutoGenerateColumns="False">
        <Columns>
            <asp:BoundField DataField="Name" HeaderText="姓名" />
            <asp:BoundField DataField="Birthday" HeaderText="出生年月" />
            <asp:BoundField DataField="Sex" HeaderText="性别" />
            <asp:BoundField DataField="Mobile" HeaderText="移动电话" ItemStyle-CssClass="num" />
            <asp:BoundField DataField="IDCard" HeaderText="身份证号" ItemStyle-CssClass="num" />
        </Columns>
    </asp:GridView>
</div>
Response.Clear();
Response.Charset = "UTF-8";
Response.ContentType = "application/vnd.ms-excel";
Response.ContentEncoding = System.Text.Encoding.UTF8;
Response.AppendHeader("Content-Disposition", "attachment;filename=Userinfo.xls");
System.IO.StringWriter sw = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter htw = new System.Web.UI.HtmlTextWriter(sw);

DataTable dt = bllUsers.GetAllList().Tables[0];
GridViewdg.DataSource = dt;
GridViewdg.DataBind();

dg.RenderControl(htw);
Response.Write(sw.ToString());
Response.End();

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

晕死了,弄这个东西的时候总觉得太费劲,感觉有简单的方法,果然,思路刚换就想起来了平时使用的模板,因为是修改别人做的东西,就没想着改,直接一个Table向外一套,然后里面td想写啥样式写啥样式,哪来那么麻烦。

posted @ 2009-07-30 18:35 Lionheart Zhang 阅读(87) 评论(0) 编辑

2009年7月29日

发布网站不能忽视权限

摘要: 今天发布网站时粗心大意把dll传错目录了,为了图省事,没有删掉重传到正确目录,而是直接复制文件到bin目录下,结果导致应用程序找不到dll文件,重新继承权限才恢复正常。原因是复制的时候把权限一起带过去了,而程序没有访问除网站目录外的任何权限,结果就出现了上述问题。。。阅读全文

posted @ 2009-07-29 15:47 Lionheart Zhang 阅读(18) 评论(0) 编辑

2009年7月23日

IE中判断JS访问剪切板是否成功

摘要: if (window.clipboardData) { if (window.clipboardData.setData('TEXT', '要复制的文本')) { alert('复制成功'); } else { alert('你选择了不允许,复制失败'); }}阅读全文

posted @ 2009-07-23 16:33 Lionheart Zhang 阅读(160) 评论(0) 编辑

2009年6月29日

DataTable.Compute自由计算表达式

摘要: public static object Eval(string AExpression){ try { return new System.Data.DataTable().Compute(AExpression, ""); } catch { return null; }}private void button1_Click(object sender, EventArgs e){ lblRe...阅读全文

posted @ 2009-06-29 11:23 Lionheart Zhang 阅读(109) 评论(0) 编辑

2009年6月15日

转换日期显示格式的各种方法

摘要: 将"2008-10-10"转换成"2008年10月10日"有多种方法,对用中文的系统来说,最简单了: string originalDateString = "2008-10-10";//转换成"2008年10月10"string LongDateString = Convert.ToDateTime(original...阅读全文

posted @ 2009-06-15 18:31 Lionheart Zhang 阅读(111) 评论(0) 编辑

2009年6月14日

防止ASP.NET按钮多次提交的办法及延伸

摘要: 防止按钮多次提交就是在点击按钮后设置this.disabled=true,在ASP.NET中可以很简单的实现:直接修改按钮属性OnClientClick属性为OnClientClick=“this.disabled=true;”。 btnUpload.OnClientClick = "this.disabled=true;";但是,我发现仅仅设置这个属性的话,有些情况(具体什...阅读全文

posted @ 2009-06-14 04:02 Lionheart Zhang 阅读(277) 评论(1) 编辑

2009年5月29日

让Fireball CodeEditor控件支持中文

摘要: Fireball.CodeEditor是个很强大的编辑器。实话说,就一个编辑器,附加那么多DLL,有些不合算,呵呵。 语法文件内置,编译的时候已经提供了大量的语法文件,是全部编辑器里面内置最多的一个编辑器。可以使用DLL文件对语法进行扩充。提供设置界面对语法高亮进行设置,只是界面不咋滴,呵呵,过于简单了一些。提供传说中的无限级别的redo功能,这个功能的确是编辑器不可或缺的。提供find和 re...阅读全文

posted @ 2009-05-29 01:59 Lionheart Zhang 阅读(245) 评论(0) 编辑

刚学习C#时自己写的数据库连接类

摘要: using System;using System.Collections.Generic;using System.Text;using System.Data;using System.Data.SqlClient;using System.Configuration;namespace DBUtility{ /// <summary> /// SQLServer的数据库连接类 /...阅读全文

posted @ 2009-05-29 01:42 Lionheart Zhang 阅读(125) 评论(0) 编辑

试用Windows Live Writer

摘要: 看的不少人都使用Windows Live Writer了,而且博客园也推荐使用,既然如此,我今天就来试用一番。 博客园也真是的,代码高亮的插件也不直接给个链接,我还是Google搜了一番才在CodePlex找到的。 刚点安装,就提示需要3.5运行库,晕哦,我这台还没装运行环境呢,明天再装吧,先试着发一贴看看效果。看的有的人说速度慢了些,估计是有图片的原因,现在也没啥图片,先发了再说。阅读全文

posted @ 2009-05-29 01:19 Lionheart Zhang 阅读(25) 评论(0) 编辑

2009年5月26日

统一的为对象添加多播事件委托的方法

摘要: //统一的为对象添加多播事件委托的方法/* 参数说明:oTarget : 要添加事件的对象.比如"document".sEventType : 事件类型.比如单击事件"click".fnHandler : 发生事件时调用的方法. 比如一个静态函数"hideCalendar" 使用举例://单击页面的任何元素,只要没有取消冒泡,都可以关闭日历控件var cf = document.getElem...阅读全文

posted @ 2009-05-26 23:08 Lionheart Zhang 阅读(50) 评论(0) 编辑

2009年5月24日

从jQuery开始

摘要: jQuery,很早我就知道有这么一套脚本库了,资料也不知不觉的收集了一大堆,但是没有认真看过,一是贪玩,二是没有这方面的需求。“没有压力就没有动力”,有压力,人们才会有动力,有压力,才能促使我们不断进取、不断进步。 先说说我对jQuery的了解吧。 jQuery是一套轻量级的JavaScript脚本库,它提供了一些很方便的函数,没有浏览器兼容系问题,还有就是jQuery的帮助文档很得好,使用jQu...阅读全文

posted @ 2009-05-24 05:14 Lionheart Zhang 阅读(134) 评论(0) 编辑

新博客申请下来,先写篇文摘吧

摘要: 在博客园安家了。我有不少博客,不是根本不用,便是记录的东西乱七八糟的,我也懒得去整理了。写到这里,就想起玩英雄传说VI空之轨迹里面奥利维尔说的一句话:“与其重新涂奶油,不如重新烤蛋糕”。既然在博客园嘛,自然是记录技术相关的内容了,虽然我还比较菜,但是记录记录学习轨迹也是不错的。以前都是整天玩乐,新的一岁开始了,也该收心认真学习了。好了,闲话也不多说,留个纪念就行,以后没事翻...阅读全文

posted @ 2009-05-24 04:16 Lionheart Zhang 阅读(16) 评论(0) 编辑

导航

<2012年2月>
2930311234
567891011
12131415161718
19202122232425
26272829123
45678910

公告

昵称:Lionheart Zhang
园龄:2年8个月
粉丝:0
关注:5

搜索

 

常用链接

我的标签

随笔档案(21)

最新评论

阅读排行榜

评论排行榜

推荐排行榜