ฉันเพิ่งอัปเดต jQuery จาก 1.8 เป็น 2.1 ทันใดนั้นฉันก็ค้นพบว่า.live()
หยุดทำงาน ฉันได้รับข้อผิดพลาด
TypeError: $(...).live is not a function
มีวิธีใดบ้างที่ฉันสามารถใช้แทนได้.live()
?
ฉันเพิ่งอัปเดต jQuery จาก 1.8 เป็น 2.1 ทันใดนั้นฉันก็ค้นพบว่า.live()
หยุดทำงาน ฉันได้รับข้อผิดพลาด
TypeError: $(...).live is not a function
มีวิธีใดบ้างที่ฉันสามารถใช้แทนได้.live()
?
คำตอบ:
.live()
ถูกลบในเวอร์ชัน 1.9 เป็นต้นไปซึ่งหมายความว่าหากคุณกำลังอัปเกรดจากรุ่น 1.8 และรุ่นก่อนหน้าคุณจะสังเกตเห็นสิ่งต่าง ๆ แตกหักหากคุณไม่ทำตามคำแนะนำในการโยกย้ายด้านล่าง คุณต้องไม่แทนที่.live()
ด้วย.on()
!
สำหรับการแก้ไขอย่างรวดเร็ว / ร้อนบนเว็บไซต์สดไม่เพียงแค่เปลี่ยนคำหลักlive
ที่มีon
,
เป็นพารามิเตอร์ที่แตกต่างกัน !
.live(events, function)
แผนที่ควรไปที่:
.on(eventType, selector, function)
ตัวเลือก (เด็ก) มีความสำคัญมาก! หากคุณไม่จำเป็นต้องใช้วิธีนี้ด้วยเหตุผลใด ๆ null
ตั้งค่าให้
ก่อน:
$('#mainmenu a').live('click', function)
หลังจากนั้นคุณย้ายองค์ประกอบลูก ( a
) ไปยัง.on()
ตัวเลือก:
$('#mainmenu').on('click', 'a', function)
ก่อน:
$('.myButton').live('click', function)
หลังจากนั้นคุณย้ายองค์ประกอบ ( .myButton
) ไปยัง.on()
ตัวเลือกและค้นหาองค์ประกอบหลักที่ใกล้ที่สุด (ควรมี ID):
$('#parentElement').on('click', '.myButton', function)
หากคุณไม่ทราบว่าควรใส่อะไรเป็นพาเรนต์body
จะใช้งานได้เสมอ:
$('body').on('click', '.myButton', function)
คุณสามารถหลีกเลี่ยงการ refactoring รหัสของคุณโดยการรวมรหัส JavaScript ต่อไปนี้
jQuery.fn.extend({
live: function (event, callback) {
if (this.selector) {
jQuery(document).on(event, this.selector, callback);
}
return this;
}
});
รายการเอกสาร jQuery API live()
ว่าเลิกเป็นของรุ่น 1.7 และลบออกเป็นรุ่น 1.9: การเชื่อมโยง
เลิกใช้เวอร์ชัน: 1.7, ถูกลบ: 1.9
นอกจากนี้ยังระบุว่า:
ตั้งแต่ jQuery 1.7 วิธีการ. live () เลิกใช้แล้ว ใช้. on ()เพื่อแนบตัวจัดการเหตุการณ์ ผู้ใช้งาน jQuery เวอร์ชันเก่าควรใช้. delegate ()ตามความต้องการของ. live ()
ส่งต่อพอร์ต.live()
สำหรับ jQuery> = 1.9 หลีกเลี่ยงการสร้างการอ้างอิง JS อีกครั้งบนการ.live()
ใช้บริบทตัวเลือก DOM ที่ปรับให้เหมาะสม
/**
* Forward port jQuery.live()
* Wrapper for newer jQuery.on()
* Uses optimized selector context
* Only add if live() not already existing.
*/
if (typeof jQuery.fn.live == 'undefined' || !(jQuery.isFunction(jQuery.fn.live))) {
jQuery.fn.extend({
live: function (event, callback) {
if (this.selector) {
jQuery(document).on(event, this.selector, callback);
}
}
});
}
.live () เลิกใช้แล้วและถูกลบออกจาก jQuery 1.9 คุณควรใช้. on ()
.live ถูกลบใน 1.9 โปรดดูคำแนะนำในการอัปเกรด: http://jquery.com/upgrade-guide/1.9/#live-removed
การแก้ไขที่ง่ายมากที่ไม่จำเป็นต้องเปลี่ยนรหัสของคุณเพียงเพิ่มสคริปต์การย้ายข้อมูล jquery ดาวน์โหลดได้ที่นี่ https://github.com/jquery/jquery-migrate/
มันให้การเลิก jquery แต่ฟังก์ชั่นที่จำเป็นเช่น "สด", "เบราว์เซอร์" ฯลฯ
ฉันมักจะไม่ใช้. on () ไวยากรณ์ถ้าไม่จำเป็น ตัวอย่างเช่นคุณสามารถย้ายข้อมูลได้ง่ายขึ้นเช่นนี้:
อายุ:
$('.myButton').live('click', function);
ใหม่:
$('.myButton').click(function)
นี่คือรายการของตัวจัดการเหตุการณ์ที่ถูกต้อง: https://api.jquery.com/category/forms/
หากคุณใช้พลอย jQuery ของ Ruby on Rails jquery-rails
และด้วยเหตุผลบางประการที่ทำให้คุณไม่สามารถสร้างรหัสดั้งเดิมของคุณได้รุ่นล่าสุดที่ยังคงรองรับคือ2.1.3
และคุณสามารถล็อคได้โดยใช้ไวยากรณ์ต่อไปนี้Gemfile
:
gem 'jquery-rails', '~> 2.1', '= 2.1.3'
จากนั้นคุณสามารถใช้คำสั่งต่อไปนี้เพื่ออัปเดต:
bundle update jquery-rails
ฉันหวังว่าจะช่วยให้ผู้อื่นประสบปัญหาคล้ายกัน
return this;
ที่ท้ายฟังก์ชั่นเพื่อรักษาความสามารถในการผูกมัด