在IE中支持html5表单属性

兼容所有的浏览器支持表单的html5属性,表现形式与谷歌和火狐一致,目前支持:

    autofocus、placeholder、required、pattern

共享此文件的目的是希望有人能帮忙完善,减少在表单处理方面的工作量,并能不吝啬的共享出来。

如果您对此进行了改进,请发一份到我的邮箱里,谢谢!

@email zhoulinspq2006@126.com

@qq 294692513

实现屏蔽键盘所有键

javascript 2007-06-09 16:44实现屏蔽键盘所有键的javascript代码如下:

<script language=”javascript”>

<!–

function document.onkeydown(){

     event.keyCode = 0;

     event.returnvalue = false;

}

–>

</script>

使用Java程序自动发博客的尝试

案例:我正在将我网站的资料搬到我在百度空间的博客哦:作为备份用。
http://hi.baidu.com/java2000_net

手里有好多的技术资料,不想一个一个的粘贴到那里,包括在CSDN的一些代码,想复制一份到那里,留个备份。决定使用Java程序直接向博客里发数据。
需要解决的几个问题
1 认证
2 发送数据
3 解决发送太频繁的问题

一 认证

百度支持保存用户名和密码,也就是自动登录,所以其登录信息肯定保存在cookie里面。
如何获得cookie呢?我提供2个方法
1 你去你机器的IE的临时目录里查找cookie吧,比如
C:\Documents and Settings\Administrator\Local Settings\Temporary Internet Files

里面有许多的cookie文件,具体是哪个?你自己找吧,我就不多说了。

2 用Firefox + Firebug 你只要看一下网络链接数据的Header,就可以看到cookie部分的数据了,比如

我们编写的程序,就需要把这个同时送过去,这样对方的程序就会自动识别登录的用户信息了。

二 发送数据

我们使用HttpURLConnection 的 POST方法进行数据的发送,注意其中关键的几个部分

  1. Host 这个一定要设置成提交的主机相同,因为对于虚拟主机,这个最关键了
  2. Referer 这个一般被用来防止盗链,所以一定要设置为一个属于他站点的链接,比如发贴的页面链接
  3. Cookie 这个是认证的关键,否则发贴后会让你登录的
  4. Content-Type 对于普通的POST提交,使用 application/x-www-form-urlencoded,如果是带附件的提交,则需要使用multipart/form-data; boundary=XXXXXXX, 其中的XXXXXX是数据的边缘分界标志
  5. Content-Length 提交的数据长度,字节数

数据没啥特殊的,只要符合表单的要求就可以了,比如百度博客的数据格式如下
ct=1&cm=1&spRefURL=http%3A%2F%2Fhi.baidu.com%2Fjava2000%25255Fnet%2Fcreat%2Fblog%2F&spBlogTitle={TITLE}&spBlogText={CONTENT}&spBlogCatName=%C4%AC%C8%CF%B7%D6%C0%E0&spIsCmtAllow=1&spBlogPower=0&spVcode=&spVerifyKey=&tj=+%B7%A2%B1%ED%CE%C4%D5%C2+

其中的{TITLE}应该替换为我们自己的主题,{CONTENT}替换为我们自己的内容。
下面是发送数据的代码

  1.   /**
  2.    * 发送普通的POST数据
  3.    * 
  4.    * @param host
  5.    *          主机
  6.    * @param charset
  7.    *          编码
  8.    * @param postURL
  9.    *          表单提交的地址URL
  10.    * @param referer
  11.    *          来源,使用填写表单的页面
  12.    * @param cookies
  13.    *          认证数据
  14.    * @param message
  15.    *          发送的数据模板
  16.    * @param title
  17.    *          标题,将替换模板里的对应位置
  18.    * @param content
  19.    *          内容,将替换模板里的对应位置
  20.    * @return 成功返回true
  21.    */
  22.   public static boolean post(String host, String charset, String postURL, String referer, String cookies, String message, String title, String content) {
  23.     try {
  24.       URL url = new URL(postURL);
  25.       HttpURLConnection con = (HttpURLConnection) url.openConnection();
  26.       con.setDoOutput(true); // POST方式
  27.       con.setRequestMethod(“POST”);
  28.       con.addRequestProperty(“Host”, host);
  29.       con.addRequestProperty(“Referer”, referer);
  30.       con.addRequestProperty(“Cookie”, cookies);
  31.       con.addRequestProperty(“Content-Type”“application/x-www-form-urlencoded”);
  32.       message = message.replace(“{TITLE}”, URLEncoder.encode(title, charset));
  33.       message = message.replace(“{CONTENT}”, URLEncoder.encode(content, charset));
  34.       con.addRequestProperty(“Content-Length”, Integer.toString(message.getBytes(charset).length));
  35.       OutputStream os = con.getOutputStream(); // 输出流,写数据
  36.       os.write(message.getBytes(charset));
  37.       os.flush();
  38.       BufferedReader reader = new BufferedReader(new InputStreamReader(con.getInputStream(), charset)); // 读取结果
  39.       String line;
  40.       while ((line = reader.readLine()) != null) {
  41.         // System.out.println(line); // 我这里不再读取每一样了,大家测试时可以去掉注释掉的break,并去掉这里的注释
  42.         break;
  43.       }
  44.       os.close();
  45.       reader.close();
  46.       return true;
  47.     } catch (Exception ex) {
  48.       ex.printStackTrace();
  49.       return false;
  50.     }
  51.   }

给大家提供一个参考的参数数据

  1. host=hi.baidu.com
  2. charset=GBK
  3. cookie=
  4. post=http://hi.baidu.com/java2000%5Fnet/creat/blog/
  5. action=http://hi.baidu.com/java2000%5Fnet/commit
  6. message=ct=1&cm=1&spRefURL=http%3A%2F%2Fhi.baidu.com%2Fjava2000%25255Fnet%2Fcreat%2Fblog%2F&spBlogTitle={TITLE}&spBlogText={CONTENT}&spBlogCatName=%C4%AC%C8%CF%B7%D6%C0%E0&spIsCmtAllow=1&spBlogPower=0&spVcode=&spVerifyKey=&tj=+%B7%A2%B1%ED%CE%C4%D5%C2+

其中的cookie我去掉了,哈哈。 post 就是填写博客的地址,action就是提交博客的地址,其它的大家自己看吧

发送的接口

  1. package net.java2000.blogsender;
  2. public interface Sender {
  3.   public boolean send(String title, String message);
  4. }

我们给百度博客的实现类

  1. package net.java2000.blogsender.baidu;
  2. import java.io.IOException;
  3. import java.util.Properties;
  4. import net.java2000.blogsender.Sender;
  5. import net.java2000.blogsender.util.PostUtil;
  6. /**
  7.  * 百度的博客发送实现类
  8.  * 
  9.  * @author 赵学庆,Java世纪网(java2000.net)
  10.  * 
  11.  */
  12. public class BaiduSender implements Sender {
  13.   private String host;
  14.   private String charset;
  15.   private String post;
  16.   private String action;
  17.   private String cookie;
  18.   private String message;
  19.   public boolean send(String title, String content) {
  20.     content = content.replace(“\r\n”“<br/>”);
  21.     content = content.replace(“\n”“<br/>”);
  22.     return PostUtil.post(host, charset, action, post, cookie, message, title, content);
  23.   }
  24.   public BaiduSender() {
  25.     Properties p = new Properties();
  26.     try {
  27.       p.load(BaiduSender.class.getResourceAsStream(“baidu.properties”));
  28.       host = p.getProperty(“host”);
  29.       charset = p.getProperty(“charset”);
  30.       post = p.getProperty(“post”);
  31.       action = p.getProperty(“action”);
  32.       cookie = p.getProperty(“cookie”);
  33.       message = p.getProperty(“message”);
  34.     } catch (IOException e) {
  35.       e.printStackTrace();
  36.     }
  37.   }
  38. }

三 解决发送太频繁的问题
  我测试,百度的文章最快需要1分钟才能发一个,否则会因为发送太快而让你输入验证码,那个我可破解不了。
所以我们的程序应该发送一个之后,休眠1分钟再发另外一个。

小结

用程序做类似的东西基本都差不多,都是模拟浏览器进行数据的提交。
JavaEye的博客发送程序也快弄好了,整理完毕后也发上来和大家分享。

欢迎访问Java世纪网 http://www.java2000.net

<script type=”text/javascript”>

</script> <script src=”http://pagead2.googlesyndication.com/pagead/show_ads.js” type=”text/javascript”>
</script>

openflashchart

注意点:

<script type=”text/javascript” src=”../js/json/json2.js”></script>
<script type=”text/javascript” src=”js/swfobject.js”></script>

json2.js 的路径, swfobject.js 的路径

swfobject.embedSWF(“open-flash-chart.swf”, “my_chart”, “350”, “200”, “9.0.0”);

open-flash-chart.swf 在此是在根目录下,如果不是根目录,上面的路径需要重新修改。

MVC分页JQueryPager

导入的包

    <script type="text/javascript" src="@Url.Content("~/Content/Admin/js/jquery/jquery.pager.js")"></script>
    <link rel="stylesheet" type="text/css" href="@Url.Content("~/Content/Admin/Pager.css")" />

 

Index.aspx

@{
    ViewBag.Title = "Index";
}
@using com.fh.Models
@model DemoList
<div id="sourcelist">
  @* @{
       Html.RenderAction("PageSelected", new { cuurentPageIndex = 0 });
    }*@

    @Html.Partial("_TableList",Model)
</div>
<script type="text/javascript">
    $(document).ready(function () {
        PageClick(1); //$(".itemspager").pager({ pagenumber: currentPageNumber, pagecount: totalPageNumber, buttonClickCallback: PageClick });
    });

</script>

_TableList.cshtml(PartialView)

@using com.fh.Models
@model DemoList
<table>
        <thead>
            <tr>
                <td>
                    ID
                </td>
                <td>
                    Name
                </td>
            </tr>
        </thead>
        <tbody>
            @foreach (var item in Model.DataSource)
            {
                <tr>
                    <td>@item.ID
                    </td>
                    <td>@item.Name
                    </td>
                </tr>
            }
        </tbody>
    </table>

    <div class="clear">
</div>
@if (Model.TotalItems > 0)
{
    if (Model.TotalItems <= 5)
    {
    <div class="pagination">
        <div class="results">
            Showing 1 to @Model.TotalItems of @Model.TotalItems (1 Pages)</div>
    </div>
    }
    else
    { 
    <div class="itemspager pagination">
    </div>
    }
}
<div class="clear">
</div>


<script type="text/javascript" language="javascript">
   var currentPageNumber = 1;
    var numPerPage =5;
    var totalItems=@Model.TotalItems;
    var totalPageNumber = Math.ceil(totalItems / numPerPage);
    var url="@Url.Action("PageSelected","Demo")";
var PageClick = function (pageclicknumber) {
     currentPageNumber=pageclicknumber;
       $.ajax({
                    async: false,

                    type: "Post",

                    url:url,

                    data: ({ cuurentPageIndex: currentPageNumber }),//will be more parameters when you needed.

                    dataType: "html",
                    success: function (responseData) {
                        $("#sourcelist").html(responseData); //render table
                          totalitems=@Model.TotalItems;
                          totalPageNumber = Math.ceil(totalItems / numPerPage);
                            $(".itemspager").pager({ pagenumber:pageclicknumber, pagecount:totalPageNumber, buttonClickCallback: PageClick });
                    }
               });         
};

   
</script>

 

ViewModel

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace com.fh.Models
{
    public class DemoList
    {
        public DemoList()
        {
            DataSource = new List<Demo>();
        }
        public List<Demo> DataSource { get; set; }
        public int TotalItems { get; set; }
        public int CurrentPageIndex { get; set; }
    }
    public class Demo
    {
        public int ID { get; set; }
        public string Name { get; set; }
    }
}

 control

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using com.fh.Models;

namespace com.fh.Controllers
{
    public class DemoController : _Base
    {
        public readonly int numberPerPage = 5;
        public ActionResult Index()
        {
            DemoList m = new DemoList();
            //m.DataSource = CreatePageListTestDate();
            //return View(m);
            return View(m);
        }
        public ActionResult PageSelected(int cuurentPageIndex)
        {
            DemoList m = new DemoList();
            m.CurrentPageIndex = cuurentPageIndex;
            m.DataSource = CreatePageListTestDate().Skip((cuurentPageIndex-1) * numberPerPage).Take(numberPerPage).ToList();
            m.TotalItems = CreatePageListTestDate().Count;
            return PartialView("_TableList", m);
        }
        public List<Demo> CreatePageListTestDate()
        {
            List<Demo> r = new List<Demo>();
            for (int i = 1; i < 100; i++)
            {
                r.Add(new Demo
                {
                    ID = i,
                    Name = "test name " + i,
                });
            }
            return r;
        }
    }
}

利用JavaScript创建随机数与随机图片

利用JavaScript创建随机数与随机图片

  创建随机数

  ①自JavaScript产生后,好多浏览器中都有内置的随机数发生方法。例如:

  var number = Math.random();

  该方法产生一个0到1之间的浮点数。

  ②基于时间,亦可以产生随机数。例如:

  var now=new Date();

  var number = now.getSeconds();

  这将产生一个基于目前时间的0到59的整数。

  var now=new Date();

  var number = now.getSeconds()%43;

  这将产生一个基于目前时间的0到42的整数。

  ③这里介绍一个相当优秀的的随机数发生器程序,能应用于许多领域。

<script language="JavaScript"><!--  
// The Central Randomizer 1.3 (C) 1997 by Paul Houle (houle@msc.cornell.edu)  
// See: http://www.msc.cornell.edu/~houle/javascript/randomizer.html  
rnd.today=new Date();  
rnd.seed=rnd.today.getTime(); 
function rnd() {  
    rnd.seed = (rnd.seed*9301+49297) % 233280;  
    return rnd.seed/(233280.0);  
};  
function rand(number) {  
    return Math.ceil(rnd()*number);  
};  
// end central randomizer. -->  
</script> 

  如果要在你的网页中使用该随机数发生器,必须把这段代码放在 <head>和</head> 标记之间。

  要创建一个随机浮点数时,使用rnd();要创建一个随机整数时,例如,1到10时,使用rand(10)。

  下面创建随机图片的例子中,就是用这个随机数发生器来产生随机数的,因此,要使下面的例子能正常工作,要确保你的网页中已包含上面这段代码。

  创建随机图片

  创建随机图片,这是利用随机数所能做的最简单的事了。此例中,我们假设有10张图片,  banner1.gif…..banner10.gif,每当文档被载入时,我们希望能随机地显示这些图片。

<script language="JavaScript"><!--  
document.write('<img src="../images/banner' + rand(10) + '.gif" width=400 height=40>');  
//--></script> 

  如果图片不是以数字的形式来命名的,或者图片的类型或大小不一样时,那么,你也可以通过检查随机数的值,然后显示相应的图片:

<script language="JavaScript"><!--  
var number = rand(10);  
if (number == 1) {  
  var picture = "one.gif";var width = 400;var height = 40;  
}  
else if (number == 2) {  
  var picture = "two.jpg";var width = 200;var height = 20;  
}  
  
  
else if (number == 9) {  
  var picture = "nine.gif";var width = 450;var height = 450;  
}  
else if (number == 10) {  
  var picture = "ten.jpg";var width = 40;var height = 400;  
}  
document.write('<img src="../images/' + picture + '" width=' + width + ' height=' + height + '>');  
//--></script> 

JavaScript倒计时自动跳转

<div id="ShowDiv" align="left" class="tishi"></div>
	<div align="left">
    	group edit page
     </div>
<script language='javascript' type='text/javascript'>    
var secs =5; //倒计时的秒数    
var URL ;    
function Load(url){    
URL =url;    
for(var i=secs;i>=0;i--)    
{    
window.setTimeout('doUpdate(' + i + ')', (secs-i) * 1000);    
}    
}    
function doUpdate(num)    
{    
document.getElementById('ShowDiv').innerHTML = '将在'+num+'秒后自动跳转到 指定页面' ;    
if(num == 0) { window.location.href=URL; }    
}    
</script>  
<script language="javascript">    
Load("www.baidu.com"); //要跳转到的页面    
</script>   

自定义表单select元素样式

做项目要用到自定义样式的select插件,自己就用jQuery写了一个。

说明如下:

1、插件的样式完全有css控制,可以自定义select插件中任何一个部分的样式。

2、完全模拟select元素的交互习惯,支持select元素的js功能,例如:change事件。如果选中一个条目,此插件就会改变原select的value值,并且自动触发change事件。

3、支持键盘的操作。完全模仿原生的select的键盘习惯,支持上下键翻动,回车键选中当前条目,包括滚动条的自动适应。

 

插件预览

 

 

插件可配置项:

1、css样式位于css中,可自行配置。

2、js配置项:

                    top: 0,
                    left: 0,
                    liActive: “active”,
                    maxItems: 40

top和left是插件距离原select位置,一般不用配置。

liActive是鼠标经过条目时的样式。

maxItems是显示的最大条目,多于此条目时出现滚动条。

 

文件打包提供下载。

 

让图片动起来

随便找一个带图片的网页在地址栏输入

javascript:R=0; x1=.1; y1=.05; x2=.25; y2=.24; x3=1.6; y3=.24; x4=300; y4=200; x5=300; y5=200; DI=document.images; DIL=DI.length; 
function
 A(){
for
(i=0; i-DIL; i++){DIS=DI[ i ].style; DIS.position=
‘absolute’
; DIS.left=Math.sin(R*x1+i*x2+x3)*x4+x5; DIS.top=Math.cos(R*y1+i*y2+y3)*y4+y5}R++}setInterval(
‘A()’
,5); 
void
(0);

回车你会发现图片动起来了

 

(转载)