重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
使用jquery的then方法
创新互联建站是一家专注于网站设计制作、网站设计与策划设计,平凉网站建设哪家好?创新互联建站做网站,专注于网站建设10年,网设计领域的专业建站公司;建站业务涵盖:平凉等地区。平凉做网站价格咨询:028-86922220
1.Deferred.then()相当于Deferred.done()、Deferred.fail()、Deferred.progress()的合体,可以同时注册3个状态下的回调函数。
[javascript] view plain copy
function success(data)
{
alert("success data = " + data);
}
function fail(data)
{
alert("fail data = " + data);
}
function progress(data)
{
alert("progress data = " + data);
}
var deferred = $.Deferred();
// 一起注册回调
deferred.then(success, fail, progress);
// 分别注册回调
deferred.done(success);
deferred.fail(fail);
deferred.progress(progress);
deferred.notify("10%");
deferred.resolve("ok");
当然我们也可以像done()一样,多次调用then()注册回调函数。then()虽然可以这么使用,但是实际开发中一般不这么用,因为没有啥必要。JQuery1.8之前,这就是then()方法的作用。
2.Deferred.then()解决多个异步操作之间有依赖的问题,这才是then()真正有意义的场景。JQuery1.8之后,then()取代了过时的pipe()方法。这种场景下,我们需要使用Deferred.then()返回的新Promise对象。上面的第一种使用方式,我们忽略了Deferred.then()的返回值。
[javascript] view plain copy
var deferred = $.Deferred();
// 使用then()注册一个resolved状态的回调函数,并返回一个过滤后的promise
// 返回的filtered已经不是原来的Deferred或者Promise对象了
var filtered = deferred.then(function( value ) {
alert("trigger Deferred filter.value="+value);//5
return value * 2;
});
// 用过滤后的Promise再次注册回调函数
filtered.done(function( value ) {
alert("filtered value=" + value);//10
});
deferred.resolve( 5 );
我们用deferred.then()注册了一个完成状态下的回调函数,这个回调函数得到的值是5;之后用filtered这个新的Promise注册回调函数,这个回调函数中得到的值是10(第一个回调函数的返回结果)。现在我们看下JQuery官方对then的解释:
These filter functions can return a new value to be passed along to the promise's .done() or .fail() callbacks, or they can return another observable object (Deferred, Promise, etc) which will pass its resolved / rejected status and values to the promise's callbacks. If the filter function used is null, or not specified, the promise will be resolved or rejected with the same values as the original.
我们知道deferred.resolve()、deferred.reject()、deferred.notify()可以指定参数值,这个参数会传递给相应状态下的回调函数。如果我们使用的是done()、fail()、progress()注册的回调函数,那么某个状态下的所有回调函数得到的都是相同参数。但是如果我们使用了then()注册回调函数,那么第一回调函数的返回值将作为第二个回调函数的参数,同样的第二个函数的返回值是第三个回调函数的参数。可以对比下面的2段代码,体会下done()和then的差别。
[javascript] view plain copy
var deferred = $.Deferred();
// done()返回的仍然是原来的Deferred对象
var done_ret = deferred.done(function(data){
alert("data="+data);//5
return 2 * data;
});
alert(deferred == done_ret);//true
done_ret.done(function(data){
alert("data="+data);//5
});
deferred.resolve( 5 );
[javascript] view plain copy
var deferred = $.Deferred();
// then()返回的是一个新Promise对象
//then注册的回调函数的返回值将作为这个新Promise的参数
var then_ret = deferred.then(function(data){
alert("data="+data);//5
return 2 * data;
});
alert(then_ret == deferred);//false
then_ret.done(function(data){
alert("data="+data);//10
});
deferred.resolve( 5 );
同样地,Deferred.then也能够实现rejected和pending状态的回调函数过滤。
[javascript] view plain copy
var defer = $.Deferred();
var filtered = defer.then( null, function( value ) {
return value * 3;
});
defer.reject( 6 );
filtered.fail(function( value ) {
alert( "Value is ( 3*6 = ) 18: " + value );
});
下面这段代码可以实现chain tasks,解决异步操作中回调难的问题。
[javascript] view plain copy
var defered = $.Deferred();
var promise1 = defered.then(function(data){
alert(data);//
return data+="1";
});
var promise2 = promise1.then(function(data){
alert(data);//1
return data+="2";
});
var promise3 = promise2.then(function(data){
alert(data);//12
return data+="3";
});
promise3.done(function(data){
alert(data);//123
});
defered.resolve("");
正是由于then()这个特性,我们就可以上面复杂的AJAX嵌套改成如下形式:
[javascript] view plain copy
var promise1 = $.ajax(url1);
var promise2 = promise1.then(function(data){
return $.ajax(url2, { "data": data });
});
var promise3 = promise2.then(function(data){
return $.ajax(url3, { "data": data });
});
promise3.done(function(data){
// data retrieved from url3
});
attr方法可用2113来获取或设置属性5261,根据参数4102个数的不同来定时获取还1653是设置内,当只有1个参数时容表示获取属性值,当有2个参数时表示设置元素属性。
例如将图片的宽度设置成150:
$("img").attr("width","150");
//参数有width和150,所以是设置
例如获取图片的宽度:
$("img").attr("width");
//参数只有width,所以此时是获取
1、首先建立一个静态页面命名为js.html,标题为“JS函数调用的方法”。
2、在js.html的页面head/head之间加入 script/script。
3、在 script/script中加入一个js函数 toalert,当点击一个button的时候弹出一个alert。
4、在body之中加入一个button,并且添加一个onclick点击事件。
5、在onclick的事件中,加入js的toalert函数名,加载onclick事件的双引号中即可。
6、为了让button看的更明显一些,可以设置一下button的样式,设置宽为100px,高为30px,字的颜色为红色。
7、用浏览器打开js.html,如果点击按钮能够弹出“JS函数调用的方法”,说明调用js函数是成功的。
使用步骤如下:
1.jQuery给放到一个文件夹里面,方便我们待会引用这个jQuery,这里我就放到我项目的js文件夹里面。
2.然后我们来开始编辑HTML界面代码。
3.使用script标签把jQuery引入到我们的HTML界面。src引号里面的就是我们的jQuery路径名称。
4.接着再书写一个script标签对,里面写上jQuery入口函数,这样,当我们的HTML加载完成之后就会执行我们的jQuery代码
为jquery添加方法:
$.fn.my_alert = function(msg) {
$(this).on('click',function(){
alert(msg);
})
}
div class="btns"
button点我弹窗/button
/div
script
$('.btns button').my_alert('Alert')
/script
使用 $.fn.[方法名]。可以开发可复用的插件和组件