选择2个可选的预选标记,不进行结果处理


Select2 optional preselected tags and no result handling

EDIT:我为无结果处理找到了一个临时解决方法。您可以返回id为0的未找到结果标记。它仍然是可选的,但在将标签插入数据库时可以跳过它,如下所示:

if($tagId != 0){
    // tag is not the no result tag, so continue
}

这是一个暂时的解决方案,另一个问题仍然存在

第2版:回答无结果处理问题。我在代码中犯了一个错误,将preSelectedTags变成了PHP错误。哎呀

我已经找了两天了,似乎找不到答案。

我正在使用select2添加标记功能。它显示得很好,并且在设置了标记的情况下工作。然而,当没有预先选择的标签时,整个过程就会中断。以下是我的select2的样子:

$('.candidateTags').select2({
    //omitted for brevity
}).select2('data',preSelectedTags);

preSelectedTags是一个变量,它包含来自PHP的json编码数组。当实际添加了标签时,这很好,但当它找不到任何可以预选的东西时,整个过程就会崩溃。

此外,我似乎不知道当没有找到结果时ajax调用应该返回什么。如果没有结果,它会返回以下内容:

else {
    $results[] = array('id'=> "-1", 'text' => 'Er zijn geen resultaten gevonden');
}
echo json_encode($results);

很明显,这返回了一个可选择的选项,破坏了我的整个代码。有人能解释一下我如何使用可选的预选,以及我应该如何处理"找不到退货"消息吗?

删除else条件并在java脚本中尝试此代码

if(typeof(preSelectedTags)=='undefined') {
    $('.candidateTags').select2('data',null);
}

我自己解决了问题。

第一部分(关于preSelectedTags给出错误并破坏我的select2元素):我用这个来创建标签数组:

var preSelectedTags = [<?php  
    foreach($preSelectedTags as $tag) { 
        echo($tag . ','); 
    }
?>];

这是有效的,但是当$preSelectedTags为空时,PHP将把preSelectedTagsvar变成一个错误。要解决此问题,请添加if语句:

if(!empty($preSelectedTags)){
    //code
}

现在是第二部分(关于"未找到结果"可选选项):

显然有两种方法可以解决这个问题:

第一个是在json字符串中添加"disabled:true",所以它看起来像这样:

else {
    $results[] = array('id'=> "-1", 'text' => 'no results found', 'disabled' => 'true');
}
echo json_encode($results);

然而,这对我来说并没有起到任何作用。另一种解决方法是省略$results数组中的id:

else {
    $results[] = array('text' => 'Er zijn geen resultaten gevonden');
}
echo json_encode($results);