Select2 编程访问

Select2 Programmatic Access

我正在使用 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 下拉菜单时,此事件运行良好。它检测您 select.

选项的数据

但是,我还在页面上添加了一个按钮,允许用户设置字段的数据。它设置数据很好,但是它永远不会触发事件 select2-selecting

我尝试将数据与事件一起传递,但不管什么时候 select2-selecting 事件被触发,它 returns 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}});

});

如何将数据与触发器一起传递以便我可以在事件中访问它?

感谢您提供任何信息!

Select2 normally triggers the select2-selecting event by creating a $.Event object with the custom data containing the val and data attributes that you are looking for. 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 事件,并允许您重复使用您的事件处理程序。