posts - 1180, comments - 162, trackbacks - 1, articles - 5
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理

公告

2008年9月28日

很多朋友都在跃跃欲试 打算打造自己的jquery插件,
我是 烦透了了jquery ui的dialog插件,所以突发奇想 自己写一个。先申明 就是随便这么一写,太多的还没有完善,之所以贴出来就是给大家一个参考。

下面大家跟我一起打造一个jquery  dialog插件

首先创建一个插件

$.fn.dialog=function(){

}

下面我们首先考虑 当您要现实的信息弹出来的时候,文档上面有一个遮罩层是必需的

那我们来编写一个遮罩层
$.fn.dialog=function(){

  this.MaskDiv=function()
       {
      
       var wnd = $(window), doc = $(document);
       //alert(doc.height());
       if(wnd.height() > doc.height()){  //当高度少于一屏
        wHeight = wnd.height(); 
       }else{//当高度大于一屏
        wHeight = doc.height();  
       }
       //创建遮罩背景
       $("body").append("<div ID=MaskID></div>");
       $("body").find("#MaskID").width(wnd.width()).height(wHeight)
       .css({position:"absolute",top:"0px",left:"0px",background:"#ccc",filter:"Alpha(opacity=90);",opacity:"0.3",zIndex:"10000"});
       }

}

注:这个遮罩函数 也不怎么复杂,这里我就不过多的讲解了,有不懂的加群 来问

遮罩做好以后 我们就需要来写 信息提示显示的位置了,下面我们在写一个 显示位置的函数。

 

$.fn.dialog=function(){

  this.MaskDiv=function()
       {
      
       var wnd = $(window), doc = $(document);
       //alert(doc.height());
       if(wnd.height() > doc.height()){  //当高度少于一屏
        wHeight = wnd.height(); 
       }else{//当高度大于一屏
        wHeight = doc.height();  
       }
       //创建遮罩背景
       $("body").append("<div ID=MaskID></div>");
       $("body").find("#MaskID").width(wnd.width()).height(wHeight)
       .css({position:"absolute",top:"0px",left:"0px",background:"#ccc",filter:"Alpha(opacity=90);",opacity:"0.3",zIndex:"10000"});
       }
  this.sPosition=function(obj)
       {
      var MyDiv_w = parseInt(obj.width());
      var MyDiv_h = parseInt(obj.height());
     
      var width =parseInt($(document).width());
      var height = parseInt($(window).height());
      var left = parseInt($(document).scrollLeft());
      var top = parseInt($(document).scrollTop());

      var Div_topposition = top + (height / 2) - (MyDiv_h / 2); //计算上边距
      var Div_leftposition = left + (width / 2) - (MyDiv_w / 2); //计算左边距
      return Array(Div_topposition,Div_leftposition);
       }

}

我们这里主要是让信息显示在中间

 

完整代码:

$.fn.dialog=function(){

  this.MaskDiv=function()
       {
      
       var wnd = $(window), doc = $(document);
       //alert(doc.height());
       if(wnd.height() > doc.height()){  //当高度少于一屏
        wHeight = wnd.height(); 
       }else{//当高度大于一屏
        wHeight = doc.height();  
       }
       //创建遮罩背景
       $("body").append("<div ID=MaskID></div>");
       $("body").find("#MaskID").width(wnd.width()).height(wHeight)
       .css({position:"absolute",top:"0px",left:"0px",background:"#ccc",filter:"Alpha(opacity=90);",opacity:"0.3",zIndex:"10000"});
       }
  this.sPosition=function(obj)
       {
      var MyDiv_w = parseInt(obj.width());
      var MyDiv_h = parseInt(obj.height());
     
      var width =parseInt($(document).width());
      var height = parseInt($(window).height());
      var left = parseInt($(document).scrollLeft());
      var top = parseInt($(document).scrollTop());

      var Div_topposition = top + (height / 2) - (MyDiv_h / 2); //计算上边距
      var Div_leftposition = left + (width / 2) - (MyDiv_w / 2); //计算左边距
      return Array(Div_topposition,Div_leftposition);
       }
     this.MaskDiv();
        $("body").append("<div ID=DivDialog style='display:none'><ul><li>提示</li></ul></div>");
  var obj=$("body").find("#DivDialog");
  obj.width("200px").height("200px");
  PosT=this.sPosition(obj);
        obj.css({position:"absolute",top:PosT[0]+"px",left:PosT[1]+"px",background:"#FFCC66",zIndex:"10001"}).show("slow");
  return this;
}

 

演示地址:http://www.cnjquery.com/demo/dialog.html

posted @ 2008-09-28 13:31 linFen 阅读(479) 评论(0) 编辑

首先我们先写一个jquery的匿名函数

以下为引用的内容:
<SCRIPT LANGUAGE="JavaScript">
 $(function(){
      var alterColor  = function(table){
       $('tbody tr:odd',table).removeClass('even').addClass('odd');
       $('tbody tr:even',table).removeClass('odd').addClass('even');
      }
   alterColor('#cnjquery);
 })
</SCRIPT>

 

这是一个最基本的写法 ,还没有做成 插件形式,主要就是让表格隔行换色。

这里我们可以发现 这个函数几乎没有什么通用性,下面我们来对她进行扩展。

 

以下为引用的内容:
<SCRIPT LANGUAGE="JavaScript">
 $(function(){

   $.fn.alterColor  = function(){
      $('tbody tr:odd', this).removeClass('even').addClass('odd');
     $('tbody tr:even', this).removeClass('odd').addClass('even');
   }

      $('#cnjquery').alterColor();

 })
</SCRIPT>

 

$('#cnjquery').alterColor();

这样样子有点插件的意思了,但是我们会发现一个问题 这样写,不能链式操作,

也就是   $('#cnjquery').alterColor().find("????")等

为什么呢?因为jquery在执行每个方法的时候 都会返回一个jquery对象 也就是我们只要加一个返回值就可以了

以下为引用的内容:
 <SCRIPT LANGUAGE="JavaScript">
 $(function(){

   $.fn.alterColor  = function(){
      $('tbody tr:odd', this).removeClass('even').addClass('odd');
      $('tbody tr:even', this).removeClass('odd').addClass('even');
      return this; //新增代码    }

   $('#cnjquery).alterColor().find("tr").click(function(){
        alert(1);//可以 链式操作 了。
   });

 })
</SCRIPT>

现在我们看到可以链式操作了 到了这里我们的插件算是基本完成了,但是还有一个小小问题

也就是插件的参数都是死的 ,我们没有办法动态修改他的参数,这样应用起来就太不方便了,没有办法还需要继续改造

以下为引用的内容:
$(function(){
    $.fn.alertColor = function(options) {
       var defaults = {
         odd : "red",
          even : "blue"
  };
  var o = $.extend(defaults, options);
    return this.each(function() {
   $('tbody tr:odd', this).removeClass(o.even).addClass(o.odd);
         $('tbody tr:even', this).removeClass(o.odd).addClass(o.even);
   return this;
 })
   }

    $('#cnjquery').alertColor({ odd : "cs"});
 // 或者 $('#cnjquery').alertColor({ odd : "red"  ,  even : "blue"});
 // 或者 $('#cnjquery').alertColor();

})

哈哈哈我们的换色表格插件终于完成了,赶快动作做一下吧。

posted @ 2008-09-28 13:28 linFen 阅读(179) 评论(0) 编辑

ThickBox 是基于 jQuery 用 JavaScript 编写的网页UI对话窗口小部件. 它可以用来展示单一图片, 若干图片, 内嵌的内容, iframed的内容, 或以 AJAX 的混合 modal 提供的内容.
查看实例演示
特性:
  • ThickBox 是用超轻量级的 jQuery 库 编写的. 压缩过 jQuery 库只15k, 未压缩过的有39k.
  • ThickBox 的 JavaScript 代码CSS 文件只占12k. 所以压缩过的 jQuery 代码和 ThickBox 总共只有27k.
  • ThickBox 能重新调整大于浏览器窗口的图片.
  • ThickBox 的多功能性包括(图片,iframed 的内容,内嵌的内容,AJAX 的内容).
    • 展示单一图片(single image)
    • 展示图片集(multiple images)
    • 展示内嵌内容(inline content)
    • 展示被iFrame的内容(iframed content)
    • 展示AJAX内容(AJAX content)
    • 其他:教程本身还自带了一个很酷的JS跳转脚本
  • ThickBox 能隐藏 Windows IE 6 里的元素.
  • ThickBox 能在使用者滚动页面或改变浏览器窗口大小的同时始终保持居中. 点击图片, 覆盖层, 或关闭链接能移除 ThickBox.
  • ThickBox 的创作者决定动画应该因人而异, 所以 ThickBox 不再使用动画了. 这是特性吗? 哦, 有人说是呀.
如何实现 ThickBox :
1. ThickBox 要求使用 jQuery JavaScript 库; 正因如此, 你需要外调 jquery.js 文件在你的网页的 head 元素内, 接着还要外调 thickbox.js 文件 (注意: jquery.js 必须放在调用资源的第一位). 例子如下:
<script type="text/javascript" src="path-to-file/jquery.js"></script> <script type="text/javascript" src="path-to-file/thickbox.js"></script>
一旦你外调了 .js 文件, 打开 thickbox.js 并寻找加载图片的名字 (loadingAnimation.gif). 找到后, 根据它在你服务器上的位置确定更改它的路径.
2. 在你的网页中外调 ThickBox CSS 文件. 例子如下:
<link rel="stylesheet" href="path-to-file/thickbox.css" type="text/css" media="screen" />

<style type="text/css" media="all">@import "path-to-file/thickbox.css";</style>
或, 打开 thickbox.css 文件并复制粘贴样式到你现有的样式表中.
3. 观看例子, 学习使用不同的方法调用 ThickBox 的功能.
支持的和经测试过的浏览器:
Windows IE 6.0, Windows FF 1.5.0.5, Windows Opera 9.0, Macintosh Safari 1.3.2 &amp; 2.0.3, Macintosh FF 1.5
MIT 许可
http://www.opensource.org/licenses/mit-license.php
许可特此批出, 免费, 给任何人提供此软件的拷贝和他相关文档中的("软件"), 使用此软件不受任何限制, 所不受的限制包括: 有权利使用, 拷贝, 修改, 合并, 出版, 分发, 颁发从属许可, 和/或买卖该软件的拷贝.
打包下载代码及教程

http://www.blueidea.com/articleimg/2006/08/3912/thickbox.html

posted @ 2008-09-28 13:12 linFen 阅读(3418) 评论(1) 编辑

(环境:vs2008+jquery1.2.3)
发现.net自带的ajax.net使用webservice输出的是json,其中关键的就是在请求时:Content-Type:application/json;utf-8
所以我们只要在POST时加上一个Content-Type:application/json;utf-8就可以了

 $.ajax({
   type: "POST",
   contentType:"application/json;utf-8",
   url: "/Server/PicLib.asmx/HelloWorld",
   success: function(msg){
   var json = eval('(' + msg + ')');
   alert(json.d);}
});


var json = eval('(' + msg + ')');
(这个是把返回的字符值转换成json对象,这样子才能够正常的操作json,这里可以用try来捕捉一下错误,因为如果返回的字符串不是标准的json的话就会出错。)

上面的js要成功运行需要对.net做一下设置让“WebService输出JSON”
修改WebService,导入一个属性
 

<System.Web.Script.Services.ScriptService()> 

<System.Web.Script.Services.ScriptService()> _
<System.Web.Services.WebService(Namespace:="http://tempuri.org/")> _
<System.Web.Services.WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
<ToolboxItem(False)> _
Public Class WebService1
    Inherits System.Web.Services.WebService

    <WebMethod()> _
    Public Function HelloWorld(ByVal str As String, ByVal name As String) As String
        Return str & name
    End Function

End Class



在webconfig中添加:

    <httpHandlers>
      
<remove verb="*" path="*.asmx"/>
      
<add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
    
</httpHandlers>


注意:这个是关键,这样子才能使请求asmx文件时让它输出json格式,刚刚开始时测试了很久都不行。

在vs2008 简体中文版+jquery 1.2.3下通过测试。


在测试过程中“顺便”发现了jq的一个"BUG"
在设置Content-Type时,发现怎么样设置jq总是不理不踩,
查看了一下jq的ajax方法哪一段源码,看到了如下的代码:

            if ( s.data )
                xml.setRequestHeader(
"Content-Type", s.contentType);

上面的data是ajax请示的参数,当参数值不为空才设置请求的Content-Type
我不知道这个到底是不是它的bug,在实际使用的时,你会碰到在调用webservice的一个方法,而这个方法是没有参数时,这样子
果你不想修改jq的源码的话,就在请求时附加一些无用的数据,如:data:"{}",不然jq可是会发“烂咂”(脾气)哦~呵呵

以上的问题还请使用jq的朋友们注意一下。

应朋友们的要求我写了个简单的演示,源码里已写好注释了,请大家查看相关的源码
演示是vs2008(vb)写的,下载源码

posted @ 2008-09-28 12:48 linFen 阅读(281) 评论(0) 编辑

使用JQuery中ajax方法访问web服务。

1.ajax方法需要填写:
 
JScript code

$.ajax({
type:
"POST",
//注明 返回Json
contentType:"application/json;utf-8",
//CollegeDepartWebServices.asmx web服务名 /GetCollegeDepart 方法名
url:"CollegeDepartWebServices.asmx/GetCollegeDepart",
//strDepartId 参数名称 collegeId 参数值
data:"{strDepartId:"+collegeId+"}",
dataType:
"json",
success:
function(result){
var json=null
try
{
if(result)
{
//因为返回的是ArrayList 所以循环取出其中的值
$.each(result, function(i, n){
//ddlDepart 为下来菜单。循环的向下拉菜单中添加新的选项
ddlDepart.options[ddlDepart.length]=new Option(n.CollegeDepartTitle,n.CollegeDepartId);

});
}


}
catch(e)
{
alert(
"错误>>"+e.message);
return;

}

},
error:
function(data)
{
alert(data.status
+">>> "+data.statusText);
}
});



----
CollegeDepartWebServices.asmx.cs web服务类
C# code

[WebService(Namespace
= "http://tempuri.org/")]
[WebServiceBinding(ConformsTo
= WsiProfiles.BasicProfile1_1)]
[ScriptService]
public class CollegeDepartWebServices : System.Web.Services.WebService
{

public CollegeDepartWebServices()
{

//如果使用设计的组件,请取消注释以下行
//InitializeComponent();
}

[WebMethod]
[System.Xml.Serialization.XmlInclude(
typeof(CollegeDepartInfo))]
public ArrayList GetCollegeDepart(string strDepartId)
{
CollegeDepartBL.FlushCollegeDepartCache();

if (string.IsNullOrEmpty(strDepartId))
return null;

ArrayList myList
= CollegeDepartBL.GetCollegeDepartListByCollegeID(int.Parse(strDepartId));
return myList;

}

}



说明:
ArrayList 中 存为对象CollegeDepartInfo
其属性为:stirng CollegeDepartTitle 和 int CollegeDepartId
在javascript中
ddlDepart.options[ddlDepart.length]=new Option(n.CollegeDepartTitle,n.CollegeDepartId);

Option的参数就是依据他们的。

最后重要的是:
类上方添加的
[ScriptService]
必须添加,否则ajax无法调用WebService

posted @ 2008-09-28 12:45 linFen 阅读(354) 评论(0) 编辑