0

在 Joomla 中使用引导程序。我已经尝试寻找解决方案并在此处尝试了一些不同的答案,但似乎无法使其正常工作。

到目前为止,我有以下返回名称,但我希望它发送 id 而不是搜索输入中的名称。

到目前为止,这是我通过 php 打印的内容:

    jQuery(document).ready(function() {

        var artistData = [{"id":"3","artist_name":"DJ One"},{"id":"2","artist_name":"DJ Two"},{"id":"1","artist_name":"Another DJ"}];

        jQuery('#artist_id').typeahead({

        source: function(query, process) {
            artists = [];
             ids = {};

            jQuery.each(artistData, function(id, artist) {
                ids[artist.artist_name] = artist.id;
                artists.push(artist.artist_name);
            });
            process(artists);
        },
        matcher: function (item) {
            if (item.toLowerCase().indexOf(this.query.trim().toLowerCase()) != -1) {
                return true;
            }
        },

        sorter: function (items) {
            return items.sort();
        },
        updater: function (item) {
            selectedArtist = item.id;
            return item;
        }



        });


    }); 

我已经尝试了各种答案,但这至少会返回artist_name但显然会引发 mysql 错误。如果我在输入中输入 id 号,它工作正常。

我只需要弄清楚如何在提交时将值更改为 id。任何帮助表示赞赏。

4

1 回答 1

0

我意识到这可能已经晚了,但是这里发生了一些错误:

  1. 我不确定您在哪里使用selectedArtist,因为它不是由任何可见的东西定义的。
  2. matcher,你从不returnfalse。这实际上可能是巧合,因为 JavaScript 会undefined认为false.
  3. 您经历了分解 的努力artistData,但您实际上从未明确使用该函数之外的任何一个数组(在这种情况下应声明为 withvar而不是通过不使用将其添加到全局对象中var)。
  4. 由于您将artists数组传递给process,因此此后item传递的任何内容都将只是string该数组包含的个人;它不会是原始数组中的 JSON 对象。

从那里,您可以参考我对其他类似问题的回答。默认情况下,Typeahead 2.x 不支持使用 JSON 对象,但是如果您覆盖renderandselect方法,它确实支持使用它们,您当前必须作弊才能做到这一点(在另一个答案中显示)。

最后,您可以updater使用原始 JSON item(例如,{"id":"3","artist_name":"DJ One"})做任何您想做的事情。因此,您可能应该return item.artist_name在那里,并且可能将一些全局(我想您可能已经在尝试这样做)设置item.id为跟踪实际选择的值。

另请注意:如果——在用户item从生成的预输入列表中选择了一个之后——他们输入了一个数据库中不存在的艺术家,那么你应该取消设置你设置的全局updater以避免声明id——无论如何(例如, 3) 代表他们刚刚输入的未知艺术家。

于 2013-04-19T02:24:52.020 回答