4

我正在使用很棒的 TokenInput 插件(http://loopj.com/jquery-tokeninput/)让rails做一些自动补全,而对于模型中的一组正常数据,它工作得非常好。但我的问题是,在我的情况下,我实际上有 2 个文本框我想使用它,第二个文本框的建议应该取决于第一个文本框的内容。更具体地说:我需要选择一个足球俱乐部(我可以从我的数据库中的所有现有俱乐部中自动完成),然后选择参加比赛的球队。所以球队的自动完成应该只使用与已经选择的俱乐部相关联的球队,我完全不知道如何或者即使我可以在rails和这个插件中做到这一点(但插件本身不应该真的是一个障碍)。我想我的主要问题是我缺乏使用 javascript 的经验,尤其是与 rails 结合使用。

4

2 回答 2

1

您的问题可能有许多不同的边缘情况。看看 tokenInput 方法' onResult '。

也许您可以从第一个输入字段(input-1)中获取当前值,并根据 input-1 评估 input-2 的返回 json 并过滤掉您不想要的值。您将不得不在 rails 创建的 json 数组中包含过滤所需的 id 元素。

<script type="text/javascript">
        $(document).ready(function() {
            $("#input-1").tokenInput("http://railsapp.com/your/search/action");

            $("#input-2").tokenInput("http://railsapp.com/your/search/action", {
                onResult: function (results) {
                    var input-1 = $("#input-1").val();
                    $.each(results, function (index, value) {
                        // some JS to keep only results which match input-1 values
                    });

                    return results;
                }
            });
        });
        </script>

免责声明:这只是一个想法。

希望这可以帮助。

于 2011-05-06T11:43:13.820 回答
1

感谢您的回答。我知道,我需要使用 onResult 回调,但方向错误。所以你的回答实际上帮助我正确地使用了我的方法。我得到了 95% 的工作方式,我需要它用一点点代码来丢弃任何不需要的结果:

if (value.club_id != verein1){
                        results.splice(index,1)     
                    }

问题是,不幸的是,我不得不发现 onResult 回调仅在新搜索时调用。TokenInput 插件缓存搜索/结果以减少服务器负载。因此,当我在第二个框中输入第一个字符时,它会触发搜索,调用 onResult 并且我的结果会被正确过滤。所以一切似乎都很好。但是,如果我删除第一个字符并再次输入,插件会使用缓存的结果,并且不会调用 onResult 并且结果显示为未经过滤。这意味着,如果我在第一个框中输入俱乐部,然后在第二个框中搜索团队,则所有内容都会正确过滤。但是,如果我随后决定删除俱乐部并输入另一个俱乐部(例如,因为我选择了错误的俱乐部),那么团队的结果将不再被正确过滤,因为每次搜索字符串出现两次时,插件都会抛出缓存的搜索结果。顺便说一句:缓存的结果是原始的、未过滤的结果,而不是通过我之前过滤的结果数组。

Now I'm not sure if this is a bug or if it's intended to be this way and my efforts to change the sourcecode of the plugin to change that aren't of any succes either.

于 2011-05-09T13:18:56.157 回答