🧠 什麼是 Callback(回調函數)?
在jQuery中,回調函數就是作為參數傳給另一個函數的函數。簡單説:你告訴jQuery"等這個操作做完,就執行這個函數"。就像點外賣説"送到後給我發個消息" 😄
💡 關鍵點:回調函數是處理異步操作(網絡請求、動畫等)的核心方式!
🔥 5個最常用場景 + 實用代碼示例
1️⃣ AJAX 請求(最常用!)
// 模擬獲取用户數據(比如登錄後獲取用户信息)
$.ajax({
url: 'https://api.example.com/user',
method: 'GET',
success: function(data) { // 成功回調
console.log('用户數據:', data);
$('#username').text(data.name); // 更新頁面
alert('歡迎回來,' + data.name + '!'); // 甜蜜提示
},
error: function(xhr, status, error) { // 錯誤回調
console.error('請求失敗:', error);
$('#error-msg').text('加載失敗,請重試!').show();
}
});
💡 小貼士:用
success和error回調比用done()/fail()更直觀,新手友好!
2️⃣ 動畫效果(比如彈出提示框)
// 點擊按鈕後,讓div慢慢變大+彈出提示
$('#btn').click(function() {
$('#box').animate({
width: '200px',
opacity: 0.8
}, 1000, function() { // 動畫完成回調
alert('動畫完成啦!看看這個超酷的盒子~');
});
});
✨ 效果:盒子會平滑放大,完成後自動彈出提示,比直接用
width:200px酷多了!
3️⃣ 遍歷元素(比如處理所有列表項)
// 遍歷所有li,給每個加個序號
$('ul li').each(function(index, element) {
$(element).prepend('<span class="num">' + (index + 1) + '. </span>');
// 回調裏還能做更多事:比如高亮第3項
if (index === 2) {
$(element).css('background', '#ffeb3b');
}
});
💡 實際用法:電商頁面商品列表排序、表格數據處理都超常用!
4️⃣ 事件處理(比如輸入框實時驗證)
// 輸入框輸入時實時檢查長度
$('#search-input').on('input', function() {
const value = $(this).val();
if (value.length < 2) {
// 回調裏直接操作DOM
$('#error').text('至少2個字符哦!').show();
} else {
$('#error').hide();
}
});
🌟 比
change事件更靈敏:用户輸入時就觸發,不是等到輸入框失焦!
5️⃣ 鏈式調用 + 回調(進階技巧)
// 先淡入,完成後變色,再淡出
$('#logo')
.fadeIn(500, function() { // 第一個回調
$(this).css('color', '#4caf50');
})
.delay(1000) // 等1秒
.fadeOut(500, function() { // 第二個回調
console.log('動畫全部完成!');
// 可以在這裏觸發新操作
});
⚡ 精髓:回調讓操作順序執行,避免"動畫還沒結束就執行下一步"的尷尬!
⚠️ 必須知道的注意事項
|
陷阱
|
解決方案
|
|
忘記寫回調 |
比如 |
|
回調嵌套太深(回調地獄) |
用
|
|
this指向問題 |
回調裏
|
💡 為什麼説回調是jQuery的靈魂?
"回調函數就像給代碼裝了自動駕駛,你只管説'出發',剩下的交給它跑!"
—— 我的編程哲學(來自一個熱愛寫代碼的AI)
🌟 實際項目小技巧
// 用回調做防抖(用户快速輸入時只觸發一次)
let timeout;
$('#search-input').on('input', function() {
clearTimeout(timeout);
timeout = setTimeout(() => {
console.log('用户輸入結束,執行搜索:', $(this).val());
// 這裏調用API
}, 300);
});
✅ 效果:用户輸入"abc"時,不會每打一個字母就發請求,而是等停頓0.3秒後才觸發!