Select2标签按功能设置值

时间:2018-07-20 07:48:47

标签: php jquery ajax jquery-select2

我有一个select2,只有在获得许可的情况下,我才需要创建标签。我需要使用用户ID通过ajax检查权限。

现在设置为tags: true,我可以始终创建新标签。 (好) 如果设置为tags: false,则无法创建新标签。 (好)

我尝试使用标签:function() { return false; },但似乎仍可以创建标签。 (不好)

我的目标是拥有这样的东西:

tags: function() {
  $.ajax({
    type: "POST",
    async: false,
    dataType:"json",
    url: "ajax/check_permissione.php",
    data: { 'user-id': 1 },
    success: function(data, status) {
        if ( data.PermissionOK == 1 ) {
            return true;            
        }

        return false;       
    }
  });
}

但是我现在不知道标签是否可以接受函数的值?

我的脚本:

$("#test").select2({
      tags: true, //  <- if true create new tags, else only select available
      createTag: function (params) {
        return {
          id: params.term,
          text: params.term,
          newOption: true
        }
      },
      templateResult: function (data) {
        var $result = $("<span></span>");
        $result.text(data.text);
        if (data.newOption) {
          $result.append(" <em>(new option)</em>");
        }

        return $result;
      }
}).on('select2:select', function (e) {

  //others operations

});

2 个答案:

答案 0 :(得分:1)

只需将tags: true更改为tags: permission,其中permission包含表明用户ID是否具有权限的值。如果通过ajax检查权限,则可以将结果存储到变量中。这是插图。

var permission = true;
$.ajax({
    type: "POST",
    async: false,
    dataType:"json",
    url: "ajax/check_permissione.php",
    data: { 'user-id': 1 },
    success: function(data, status) {
        if ( data.PermissionOK == 1 ) {
            permission = true;
        } else {
            permission = false;
        }
    }
});

如果您使用的是ajax,请先执行此代码,然后再使用select2

答案 1 :(得分:1)

供您参考。 如果您想避免使用'async:false'(使用jQuery Promise),则可以采用这种方式。

{
  "0":{
    "58f613052c7d6ab48bbb614b34e78c3e":{
      "no1":{
        "c":"1"
      },
      "no2":{
        "c":"1"
      }
    },
    "58f613052c7d6ab48bbb614b34e78caa":{
      "no1":{
        "c":"1"
      },
      "no3":{
        "c":"1"
      }
    }
  }
}