【问题标题】:Google Custom search trigger for concatenated text用于连接文本的 Google 自定义搜索触发器
【发布时间】:2017-09-15 00:44:25
【问题描述】:

我正在使用谷歌自定义搜索:

1- 我在谷歌搜索框中写了一个文本“A”,

2- 当我点击搜索按钮或回车时,javascript function_1/function_2 会将文本“B”(来自 html 文本框的文本,请参见随附的代码示例)连接到文本“A”,然后将触发连接文本的搜索(“A”与“B”)。

但是,看起来谷歌搜索处理器首先触发搜索仅搜索文本“A”,然后连接完成..这不是我想要的。我希望对连接的文本进行搜索。

请参阅随附的代码示例,如有任何解决方案,请告诉我。

<div class="gcse-container" id="gcse_container">
  <gcse:search enableAutoComplete="true"></gcse:search>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>


<script>    
(function($, window) {
  var elementName = '';
  var initGCSEInputField = function_1() {
    $( '.gcse-container form.gsc-search-box input.gsc-input' )
      .on( "keyup", function( e ) {
      if( e.which == 13 ) { // 13 = enter
        var searchTerm = $.trim( this.value );
        if( searchTerm != '' ) {
       var elements = document.getElementById("firstname").value;
            this.value  += elements;
        }
      }
    });
    $( '.gcse-container form.gsc-search-box input.gsc-search-button' )
      .on( "click", function_2( e ) {
      var searchTerm = $.trim( $( '.gcse-container form.gsc-search-box input.gsc-input' ).val() );
      if( searchTerm != '' ) {
          var elements = document.getElementById("firstname").value;
          searchTerm +=elements;
          $( '.gcse-container form.gsc-search-box input.gsc-input').val(searchTerm);  
      }
    });
  };

  var GCSERender = function() {
    google.search.cse.element.render({
        div: 'gcse_container',
        tag: 'search'
      });
      initGCSEInputField();
  };
  var GCSECallBack = function() {
    if (document.readyState == 'complete') {
      GCSERender();
    }
    else {
      google.setOnLoadCallback(function() {
        GCSERender();
      }, true );
    }
  };

  window.__gcse = {
    parsetags: 'explicit',
    callback: GCSECallBack
  };
})(jQuery, window);

(function() {
  var cx = '017643444788069204610:4gvhea_mvga';
  var gcse = document.createElement('script'); gcse.type = 'text/javascript'; gcse.async = true;
  gcse.src = 'https://www.google.com/cse/cse.js?cx=' + cx;
  var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(gcse, s);
})();

 </script>

 

【问题讨论】:

    标签: javascript search google-custom-search


    【解决方案1】:

    手动更改搜索字符串不是一个好主意,所以不要这样做

    $( '.gcse-container form.gsc-search-box input.gsc-input').val(searchTerm);  
    

    相反,您可以使用 prefillQuery 并执行 google 提供的用于此特定目的的 api。尝试运行以下代码 sn-p 并搜索“test”,它会将“junit”附加到查询字符串。

    <div class="gcse-container" id="gcse_container">
      <gcse:search enableAutoComplete="true"></gcse:search>
    </div>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    
    
    <script>    
    
    (function($, window) {
    	var cseElement
    	var first_name = ' junit'
      const initGCSEInputField = function() {
        $( '.gcse-container form.gsc-search-box input.gsc-input' )
          .on( "keyup", function( e ) {
    
        });
        $( '.gcse-container form.gsc-search-box input.gsc-search-button' )
          .on( "click", function( e ) {
          var searchTerm = $.trim( $( '.gcse-container form.gsc-search-box input.gsc-input' ).val() );      
          //use google api to prefill your query string and programmatically execute query
    				cseElement.prefillQuery(searchTerm + first_name)
            cseElement.execute(searchTerm + first_name)
        });
      };
    
      var GCSERender = function() {
    		cseElement = google.search.cse.element.render({
            div: 'gcse_container',
            tag: 'search'
          });
          initGCSEInputField();
      };
      var GCSECallBack = function() {
        if (document.readyState == 'complete') {
          GCSERender();
        }
        else {
          google.setOnLoadCallback(function() {
            GCSERender();
          }, true );
        }
      };
    
      window.__gcse = {
        parsetags: 'explicit',
        callback: GCSECallBack
      };
    })(jQuery, window);
    
    (function() {
      var cx = '017643444788069204610:4gvhea_mvga';
      var gcse = document.createElement('script'); gcse.type = 'text/javascript'; gcse.async = true;
      gcse.src = 'https://www.google.com/cse/cse.js?cx=' + cx;
      var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(gcse, s);
    })();
    
     </script>

    【讨论】:

    • 对不起..但我刚刚复制并将您的狙击传递到我的括号中(用于测试)并且它不起作用,我在 Google 控制台中有一条错误消息:Uncaught TypeError: Cannot read property 'prefillQuery'未定义的任何想法?您的 sn-p 中是否缺少正在执行的东西而我看不到!感谢你的帮助。谢谢
    • 好吧..谢谢兄弟..我终于找到了工作方法。感谢您的帮助;)
    猜你喜欢
    • 2019-06-28
    • 1970-01-01
    • 2014-11-04
    • 1970-01-01
    • 2019-07-17
    • 2016-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多