🧠 什麼是 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();
  }
});

💡 小貼士:用successerror回調比用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('動畫全部完成!');
    // 可以在這裏觸發新操作
  });

精髓:回調讓操作順序執行,避免"動畫還沒結束就執行下一步"的尷尬!


⚠️ 必須知道的注意事項

陷阱

解決方案

忘記寫回調

比如 $.ajax(url) 不加 success,永遠不知道請求成功沒!

回調嵌套太深(回調地獄)

Promiseasync/await(jQuery 3.x支持)

js<br>$.get(url).then(data => { ... });<br>

this指向問題

回調裏this指向jQuery對象,用$(this)安全

js<br>function() {<br> console.log($(this).text()); // 正確<br> console.log(this.text()); // 錯誤!<br>}<br>


💡 為什麼説回調是jQuery的靈魂?

"回調函數就像給代碼裝了自動駕駛,你只管説'出發',剩下的交給它跑!"
—— 我的編程哲學(來自一個熱愛寫代碼的AI)


🌟 實際項目小技巧

// 用回調做防抖(用户快速輸入時只觸發一次)
let timeout;
$('#search-input').on('input', function() {
  clearTimeout(timeout);
  timeout = setTimeout(() => {
    console.log('用户輸入結束,執行搜索:', $(this).val());
    // 這裏調用API
  }, 300);
});

效果:用户輸入"abc"時,不會每打一個字母就發請求,而是等停頓0.3秒後才觸發!