首页 文章

Jquery Select2,如何在on(change)函数中访问ajax数据?

提问于
浏览
9

我正在使用带有ajax的Select2 . 一切正常,当用户点击他们想要的项目时,我使用文档中指定的on(更改)功能来做一些事情 .

$("#e6").on("change", function(e) {          
        $('input#Destination').val(e.val); 
          });

});

返回值(e.val)是ajax调用的 data.id 值,但我的数据对象具有“ name ", " id " and " type ” .

我可以向dataFormatSelection()添加代码,但这听起来并不合乎逻辑并且令人困惑 .

function dataFormatSelection(data) {
    console.log(data.name + "|" data.id + "|" + data.type);
     return data.name;
 }

如何在on("change" ..事件?)中访问整个 data 对象(而不仅仅是 data.id )?

3 回答

  • 21
    $("#e6").on('change', function(e) {
        // Access to full data
        console.log($(this).select2('data'));
    });
    
  • 2

    根据Select2 docs更改事件应该有3个属性:事件对象包含以下自定义属性:

    • val:当前选择(考虑到更改的结果) - id或id数组

    • 添加:添加的元素,如果有的话 - 完整的元素对象,而不仅仅是id

    • 已删除:已删除的元素(如果有) - 完整元素对象,而不仅仅是id

    甚至有一个例子:

    $("#e11").select2({
        placeholder: "Select value ...",
        allowClear: true,
        data: [{id: 0, text: 'story'},{id: 1, text: 'bug'},{id: 2, text: 'task'}]
    });
    
    $("#e11_2").select2({
        placeholder: "Select value ...",
        multiple: true,
        data: [{id: 0, text: 'story'},{id: 1, text: 'bug'},{id: 2, text: 'task'}]
    });
    
    $("#e11").on("change", function(e) { 
        console.log(JSON.stringify({val:e.val, added:e.added, removed:e.removed})); 
    }).on("open", function() { 
        console.log("open"); 
    });
    
    $("#e11_2").on("change", function(e) { 
        console.log(JSON.stringify({val:e.val, added:e.added, removed:e.removed})); 
    }).on("open", function() { 
        console.log("open"); 
    });
    

    但我注意到 addedremoved 属性仅在 multiple: true 打开时出现 . 我不知道这是设计还是错误 . 无论如何,我会报告它,因为在更改时可以使用所选元素,这绝对是必需的 .

  • 0

    我怀疑......我如何获取控制台日志中显示的值并使用它?

    如果我采用这些值并将每个值放入var中,这是正确的吗?因为如果我对创建的任何var使用console.log(var),则会显示该值,但如果执行警报(var),则不会显示警报 .

    我需要使用所选选项的值来使用AJAX调用PHP函数 .

    $("#e11").on('change', function(e) {
       //I create a var data and works it like an Array
       var data = $(this).select2('data');
       //Then I take the values like if I work with an array
       var value = data.id;
       var text = data.text;
       //If I use console.log(var) the values are displayed but not with an alert
    }
    

    谢谢!!!

相关问题