我正在使用jQuery Select2,我遇到了设置值并触发事件的问题。
我有一个简单的select2下拉连接到Ajax源。这完全没问题。
我还有一个等待选择select2选项的事件:
// On project select, we add the projects to the list along with the parties
$('.projSearch').on("select2-selecting", function(e) {
// Set the value of the project
var projectID = e.val,
table = '';
alert(projectID);
console.log(e);
...
正常使用select2下拉菜单时,此事件正常。它会检测您选择的选项的数据。
但是,我还在页面上添加了一个按钮,允许用户设置字段的数据。它设置的数据很好,但它永远不会触发事件select2-selecting
。
我尝试将数据与事件一起传递,但无论何时触发select2-selecting
事件,它都返回undefined
。
$(document).on("click", "[name=addProject]", function() {
// Set the vars
var projectName = $(this).attr('projectname'),
projectID = $(this).attr('projectid'),
projectNameLong = projectName + ' ('+projectID+')';
// Add the project to the list
$("[name=projects]").select2("data", [{id: projectID, text: projectNameLong}]).trigger("select2-selecting", {val: projectID, data: {id: projectID, text: projectNameLong}});
});
如何将数据与触发器一起传递给我可以在事件中访问它?
感谢您的任何信息!
答案 0 :(得分:2)
按normally triggers the select2-selecting
event选择2 creating a $.Event
object,其中包含您要查找的val
和data
属性的自定义数据。 The second parameter of .trigger
将允许您直接从事件处理程序中获取额外数据,但它不会将其附加到事件对象。
$(document).on("click", "[name=addProject]", function() {
// Set the vars
var projectName = $(this).attr('projectname'),
projectID = $(this).attr('projectid'),
projectNameLong = projectName + ' ('+projectID+')';
// Create the data object
var data = {
id: projectID,
text: projectNameLong
};
// Create the custom event object
var evt = $.Event("select2-selecting", {
val: data.id,
data: data
});
// Add the project to the list
$("[name=projects]")
.select2("data", [data])
.trigger(evt);
});
这应该为您复制原始select2-selecting
事件,并允许您重用事件处理程序。