1

以下代码来自WP Google Suggest插件

(function ($) {
    $.fn.googleSuggest = function (opts) {
        var services = {
            youtube: 'youtube',
            books: 'books',
            products: 'products',
            news: 'news',
            images: 'img',
            web: 'psy'
        };
        opts = $.extend({
            service: 'web',
            secure: false
        }, opts);
        opts.source = function (request, response) {
            $.ajax({
                url: 'http' + (opts.secure ? 's' : '') + '://suggestqueries.google.com/complete/search?callback=?',
                dataType: 'jsonp',
                data: {
                    q: request.term,
                    client: services['youtube'],
                    nolabels: 't'
                },
                success: function (data) {
                    response($.map(data[1], function (item) {
                        return {
                            value: $("<span>").html(item[0]).text()
                        }
                    }));
                }
            });
        };
        return this.each(function () {
            $(this).autocomplete(opts);
        });
    };
    $('#s').googleSuggest();
})(jQuery);

它应该在 Wordpress 搜索字段中添加 google 建议自动完成搜索选项。问题是当您选择建议的搜索字符串时,表单只是填充,但没有提交。您需要再次按 Enter 才能提交。所以,问题是如何在选择时添加提交。

谢谢你。

===============================================

编辑:我回到这段代码并取得了一些进展。我添加了以下代码:

      opts.select = function(opts) {
      $(this).autocomplete(opts).parents('form').submit();
  }

在“返回”行之前;

    return this.each(function () {
..

现在,如果我用箭头上下移动自动建议结果,然后按回车键,表单将使用正确的字符串提交。

但是,如果用鼠标单击建议,则会提交输入的原始搜索字符串。行为示例如下:

表单中输入的搜索字符串:一二自动建议:

一二三

一二三四

一二三四五

当我用鼠标单击其中一个自动建议时,比如说“一二三四”,它会进入搜索字段。表单被提交,但事实证明它是使用原始类型的字符串“一二”提交的。

感谢您提出的任何建议。

========================================

我终于设法用替代代码解决了这个问题:

var suggestCallBack; // global var for autocomplete jsonp

jQuery(document).ready(function ($) {
    $("#s").autocomplete({
      select: function (event, ui) {
         var selectedObj = ui.item;              
         $("#s").val(selectedObj.value);
         $('#cse-search-box').submit();
         },
        source: function(request, response) {
            $.getJSON("http://suggestqueries.google.com/complete/search?callback=?",
                { 
                  "hl":"bg", // Language                  
                  "jsonp":"suggestCallBack", // jsonp callback function name
                  "q":request.term, // query term
                  "client":"youtube" // force youtube style response, i.e. jsonp
                }
            );
            suggestCallBack = function (data) {
                var suggestions = [];
                $.each(data[1], function(key, val) {
                    suggestions.push({"value":val[0]});
                });
                suggestions.length = 10; // prune suggestions list to only 5 items
                response(suggestions);


            };


        },
    });


});

该代码由用户PSR在另一个问题中提供。它必须稍作修改。原始代码开始于:

var suggestCallBack; // global var for autocomplete jsonp

$(document).ready(function () {

对于 Wordpress,它必须从以下内容开始:

var suggestCallBack; // global var for autocomplete jsonp

jQuery(document).ready(function ($) {

结案。

4

0 回答 0