javascript

    为select和input type=file标签添加样式

    21 Apr 2010

    select和input type=file两个都是html标签,但是它们在不同的浏览器上显示是完全不同,对于那些对UI要求非常高的网站来说,这是不可接受的。由于这两个标签的样式是由浏览器实现的,所以要想完全通过css来统一样式几乎是不可能的,所以我们这里需要借助javascript的帮助。

    看上去这个应该由两个标签组成,左边是一个text field,右边是一个上传的按钮,要想在所有的浏览器上都把input type=file做成这个样子好像没这个可能,可以想到的办法就是设置两个层,下面的层由一个text field和一个按钮组成,上面是一个透明的input type=file的层,高度和宽度正好覆盖下面的层就可以了。

    我是借助 javascript来生成下面的那个层

    $.each($('form input[type=file]'), function(i, elem) {
      $(elem).parent().append($("<div class...
    Read More

    Tags 


    类似facebook connect的方式验证twitter oauth

    31 Mar 2010

    最近一个项目需要实现类似与uservoice一样的widget,也就是把一段javascript放到任何的网站上,然后动态生成一个iframe来显示我们网站的内容。但是碰到一个问题,在这个widget内需要允许用户使用twiiter oauth的方式登录,但是twitter oauth认证之后会使用window.top来redirect你的页面,这样会重置我们的widget,这显然是对用户很不友好的。同时,我发现facebook connect的方式可以很好的应用在我们的widget上面,因为它不会重新刷新页面。于是我想能不能用类似与facebook connet的方式,弹出一个页面来做twitter oauth的身份验证呢?显然,这是可行的。

    其实很简单的,就是弹出一个页面,在那个页面上做twitter oauth的身份认证,在返回的时候记录session,同时关闭弹出的页面,javascript的代码如下

    if (!TwitterConnect) {
      var TwitterConnect = {};
    }
    TwitterConnect.Twitter = new func...
    Read More

    Tags 


    javascript的trim方法

    20 Nov 2008

    javascript的String类是没有trim方法的,不过我们可以通过String的replace方法来模拟

    String.prototype.trim = function() {
        return this.replace(/^\s+/g,"").replace(/\s+$/g,"");
    }
    String.prototype.ltrim = function() {
       return this.replace(/^\s+/g,"");
    }
    String.prototype.rtrim = function() {
       return this.replace(/\s+$/g,"");
    }
    Read More

    Tags 


    javascript的StringBuffer类

    13 Nov 2008

    javacript的字符串拼接和java一样是很低效的,不同的是javascript的类库中并没有java中的StringBuffer或StringBuilder。不过我们还是可以通过数组来模拟StringBuffer类:

    function StringBuffer() {
        this._objArray = [];
        this._undoFlag = false;
    };
    
    StringBuffer.prototype.toString = function() {
        if(this._objArray.length==0) {
            return '';
        }
        var str = this._objArray.join('');
        if(this._objArray.length > 1) {
            this.clear();
            this.append(str);
        }
        this._undoFlag = false;
        return str;
    };
    
    StringBuffer.prot...
    Read More

    Tags