标签 代码段 下的文章

jQuery+PHP 大话ajax免刷新提交表单与切换页面

昨天折腾了一个晚上,今天在抽空折腾的东西,不记下来未免太浪费了,于是我决定花晚上把它写下来。

Ajax是目前最流行的优化用户体验的方法,但在过去,他往往代表着牺牲SEO以及抛弃浏览器后退前进功能,但是现在,已经不是这样了。

现在的Ajax完全可以做到兼备,所以你可以看到,基本上,在你提交表单之后再也不用跳转之后才告诉你你的输入是否正确,甚至在搜索时,一边输入字符,一边进行检索。

这些都是Ajax所带来的便利,但是鉴于我还没有前后端整站写过(只有使用前后框架[PHP MVC]以及前端的经历),所以对整个流程还不能说熟悉。这次,我们从后端写到前端,一点点来解刨Ajax的套路。

- 阅读剩余部分 -

CSS 使用after伪类清除浮动

今天早上去上班的时候还在纠结,设定before和after,可是他们的位置位于元素的哪里呢?兄弟元素?子元素?在firebug里看不到他们俩的位置,在FF自带的审查元素里倒是能看到,其实是位于该元素的子元素。

于是,以前,我们说过用一个div来清除浮动,现在我们可以把它省掉了——给父元素设定after。

如下:

element:after {
     clear: both;
     content: "";
     display: block;
}

Javascript 上帝说,我的对象想要默认值

找了下貌似这一篇没写,于是乎坑出了可能是一个月前的代码mark。

我们来看以下两段

        window.Option = {};

        Option.defaultProps = function(obj, defaults) {
            function isObject(obj) {
                return Object.prototype.toString.call(obj) === '[object Object]';
            }

            if (!isObject(obj)) {
                return defaults;
            }

            for (var key in defaults) {
                if (!defaults.hasOwnProperty(key)) {
                    continue;
                }

                var objValues = obj[key];
                var defaultValue = defaults[key];

                if (isObject(objValues)) {
                    obj[key] = Option.defaultProps(objValues, defaultValue);
                } else if (objValues === undefined) {
                    obj[key] = defaultValue;
                }
            }
            return obj;
        };

        function People() {};

        People.defaults = {
            name: 'Hi',
            job: 'Student',
            age: 19,
            friends: ['No One']
        };

        people1 = Option.defaultProps({
            name: 'Sky',
            age: 20
        }, People.defaults);

        people1.prototype = People.prototype;

        People.prototype = {
            constructor: People
        };

        People.prototype.sayName = function() {
            console.log(this.name);
        };

        People.prototype.sayName.call(people1);

        console.log(Object.getPrototypeOf(people1) == People.prototype);


        people2 = new People();

        console.log(people2.prototype);

这一种类型似乎略繁琐,但他确实实现了默认值,当然,相比之下实在是不够优秀,有各种问题,包括constructor之类的。这里我们之所以不直接定义函数,而是先用对象,再里面再加一个方法,是因为javascript没有命名空间(namespace)的概念,万一重名了=A=~

        function Person(name, age, job, friends) {
            this.name = name || "hi";
            this.age = age || 19;
            this.job = job || "Student";
            this.friends = friends || "No one";
        }

相比之下,我们来看这样一段= =唔,很明显他更加常用。

PHP Maximum execution time of 30 seconds exceeded解决方案

在安装drupal的时候,由于需要大量建立表,于是乎Loading的时候超过30s,每次都跪,发现报错是在database.incLine 2171,在前面加上set_time_limit()函数。

set_time_limit(0)表示不设置超时时间。

也可以修改php.ini:
max_execution_time = 300
秒可以设置更大,然后重起服务

jQuery prop大法好

在修改Hi GPA的时候需要增加一个全选用户的功能,结果被坑惨了。

首先,最终代码是这么写的:

var text = $('#select-all-student').html();
if (text == '全选') {
    $('input[name="studentNumber"]').prop('checked', true);
    $('#select-all-student').html('取消全选')
} else {
    $('input[name="studentNumber"]').prop('checked', false);
    $('#select-all-student').html('全选');
}

这里集成了一个全选和反选的功能,可以选中所有name为studentNumber的checkbox。

- 阅读剩余部分 -

jQuery+CSS3 制作background-color渐变效果

jQuery中虽然用animate,但是他支持的毕竟有限,比如说就不支持background-color,所以要想起到过渡效果,还得靠CSS3来撑门面啦。

刚开始时候写了个function,然后想想这样一点都不好用,我还得传个obj参数进去好麻烦,后来想到了,何不在jQuery里加个方法,就能和原生函数一样调用了。

jQuery.prototype.switchBackgroundColor = function(color1, color2, time) {
    var self = this;
    self.css('background', color1);
    setTimeout(function() {
        self.css('background', color2)
    }, time);
}

- 阅读剩余部分 -

jQuery 点击其他区域关闭弹出窗体效果实现

以前尝试过用body来,结果由于冒泡的缘故,导致就算点击,也会被body中的点击事件覆盖导致根本无法弹出窗体。

于是去查了一下:

$(document).mouseup(function(e){
  var _con = $(' 目标区域 ');   // 设置目标区域
  if(!_con.is(e.target) && _con.has(e.target).length === 0){ // Mark 1
    some code...   // 功能代码
  }
});
/* Mark 1 的原理:
判断点击事件发生在区域外的条件是:
1. 点击事件的对象不是目标区域本身
2. 事件对象同时也不是目标区域的子元素
*/

关于点击空白关闭弹窗的js写法推荐?看到的,里面有许多方法, 这是其中一种,感觉也挺好的。

- 阅读剩余部分 -