ฉันมีโหนดเพิ่มฟอร์มด้วยการอ้างอิงคำที่ใช้วิดเจ็ตเติมข้อความอัตโนมัติ
ฉันต้องการ "tid" ของคำที่เติมโดยผู้ใช้โดยใช้วิดเจ็ตการเติมข้อความอัตโนมัติ
ฉันมีโหนดเพิ่มฟอร์มด้วยการอ้างอิงคำที่ใช้วิดเจ็ตเติมข้อความอัตโนมัติ
ฉันต้องการ "tid" ของคำที่เติมโดยผู้ใช้โดยใช้วิดเจ็ตการเติมข้อความอัตโนมัติ
คำตอบ:
ไม่มีเหตุการณ์ที่ถูกเรียกในขณะนี้ (ณ วันที่ 7.34) แต่มีการแก้ไขในเรื่องนี้ที่จะช่วยให้คุณใช้สิ่งที่ชอบ:
$('#input-id').on('autocompleteSelect', function(event, node) {
});
หรือถ้าคุณใช้ jQuery เวอร์ชันเก่า
$('#input-id').bind('autocompleteSelect', function(event, node) {
});
node
รายการที่เลือกอยู่ที่ไหน คุณควรจะได้รับtid
คุณสมบัติอย่างใดอย่างหนึ่งจากวัตถุนั้น
Drupal 7 และ 8 ให้การสร้างเหตุการณ์เติมข้อความอัตโนมัติ jQuery โดยไม่ต้องมีรหัสที่กำหนดเองในขณะนี้
ใน Drupal 7 autocompleteSelect
เหตุการณ์ถูกบันทึกอยู่ใน Drupal ปัญหา# 365241 (ไคลฟ์พูดถึงสิ่งนี้อยู่ในระหว่างดำเนินการเมื่อเขาโพสต์คำตอบ)
Drupal 8 การนำมาใช้ประโยชน์ jQuery UI การเติมข้อความอัตโนมัติวิดเจ็ต autocompleteclose
เหตุการณ์เป็นเหตุการณ์ jQuery UI ส่วนใหญ่คล้ายกับ D7 autocompleteSelect
เหตุการณ์ ใน D8 autocompleteselect
เหตุการณ์jQuery UI จะถูกทริกเกอร์ด้วยเช่นกัน แต่การโทรกลับของ Ajax นั้นจะไม่ได้รับค่าสถานะแบบฟอร์มที่อัปเดต autocompleteclose
การเรียกกลับมาพร้อมกับค่าสถานะแบบฟอร์มที่ปรับปรุงซึ่งโดยปกติจะเป็นสิ่งที่คุณต้องการ
ตามคำตอบอื่น ๆ ที่ระบุไว้คุณสามารถใช้ข้อมูลเหตุการณ์ในเบราว์เซอร์ไคลเอ็นต์โดยใช้jQuery บนตัวจัดการเหตุการณ์หรือ Drupal.behaviors ( Drupal 7 , Drupal 8 ) ใน Drupal 7 คุณจะใช้autocompleteSelect
เหตุการณ์และ Drupal autocompleteclose
8
หากคุณต้องการค่าในโค้ด PHP ของคุณอาจใช้การเรียกกลับ Ajax นี่คือเส้นทางบางอย่างสำหรับวิธีการทำเช่นนี้ในมีDrupal 7หรือในDrupal 8
ฉันต้องการใช้พฤติกรรมเพื่อให้มันทำงานได้ (ต้องขอบคุณปัญหาที่กล่าวถึงโดย Clive และความคิดเห็นนี้: https://www.drupal.org/node/365241#comment-9575707 ):
Drupal.behaviors.autocompleteSupervisor = {
attach: function (context) {
$('#edit-field-foo-und-0-target-id', context).bind('autocompleteSelect', function(event, node) {
// Do custom stuff here...
var entity_id = $(this).val().replace($(node).text().trim(), '').replace(/\(|\)| /g, '');
});
}
};
ใน Drupal 8 สิ่งนี้ได้ย้ายไปแล้ว คุณสามารถแทนที่การทำงานด้วยรหัสต่อไปนี้
/**
* Handles an autocompleteselect event.
*
* Override the autocomplete method to add a custom event.
*
* @param {jQuery.Event} event
* The event triggered.
* @param {object} ui
* The jQuery UI settings object.
*
* @return {bool}
* Returns false to indicate the event status.
*/
Drupal.autocomplete.options.select = function selectHandler(event, ui) {
var terms = Drupal.autocomplete.splitValues(event.target.value);
// Remove the current input.
terms.pop();
// Add the selected item.
if (ui.item.value.search(',') > 0) {
terms.push('"' + ui.item.value + '"');
}
else {
terms.push(ui.item.value);
}
event.target.value = terms.join(', ');
// Fire custom event that other controllers can listen to.
jQuery(event.target).trigger('autocomplete-select');
// Return false to tell jQuery UI that we've filled in the value already.
return false;
}
core/misc/autocomplete.js
การแทนที่รหัสใน
จากนั้นในรหัสของคุณคุณสามารถฟัง
var field = jQuery('<field-selector>');
var lastField = ''
field.on('autocomplete-select', function() {
console.log("autocompleteSelect");
// Check that field actually changed.
if ($(this).val() != lastValue) {
lastValue = $(this).val();
console.log('The text box really changed this time');
}
})