如何用单选按钮切换谷歌(和维基百科)搜索框建议?

时间:2009-04-23 23:50:32

标签: javascript jquery search-engine wiki-engine

我在页面中添加了Google和维基百科搜索框,我正在寻找一种方法来根据所选的单选按钮更改建议。

事实上,建议语言应根据所检查的语言而改变。

这是我的实际代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 <title>Google Suggest Test</title>
 <script type="text/javascript" src="googlesuggest.js"></script>
</head>
<body>
<form action="http://www.google.com/search" id="google_suggest" >
 <div>
  <input name="q" value="" type="text" />
  <input type="submit" value="OK" />
  <input type="hidden" name="complete" value="1" />
  <input type="hidden" name="ie" value="UTF-8" />
  <input type="hidden" name="oe" value="UTF-8" />
  <input type="hidden" name="num" value="30" />
  <input type="hidden" name="channel" value="s" />
  <br />
  <label for="all"><input id="all" type="radio" name="lr" value="" checked="checked" />All</label>
  <label for="lang_en"><input id="lang_en" type="radio" name="lr" value="lang_en" />English</label>
  <label for="lang_fr"><input id="lang_fr" type="radio" name="lr" value="lang_fr" />French</label>
  <label for="lang_de"><input id="lang_de" type="radio" name="lr" value="lang_de" />German</label>
  <label for="lang_ru"><input id="lang_ru" type="radio" name="lr" value="lang_ru" />Russian</label> 
  <label for="lang_es"><input id="lang_es" type="radio" name="lr" value="lang_es" />Spanish</label>
  <br /><br />
 </div>
</form>
<form method="post" action="wikipedia_action.php">
 <div>
  <input type="text" name="wikipedia_field" />
  <input type="submit" value="OK" />
  <br />
  <label for="wik_en"><input type="radio" checked="checked" name="wikipedia" id="wik_en" value="wik_en" />English</label>
  <label for="wik_fr"><input type="radio" name="wikipedia" id="wik_fr" value="wik_fr" />French</label>
  <label for="wik_de"><input type="radio" name="wikipedia" id="wik_de" value="wik_de" />German</label>
  <label for="wik_ru"><input type="radio" name="wikipedia" id="wik_ru" value="wik_ru" />Russian</label>
  <label for="wik_es"><input type="radio" name="wikipedia" id="wik_es" value="wik_es" />Spanish</label>
 </div>
</form>
</body>
</html>

脚本googlesuggest.js:

$(document).ready(function(){

window.google = {
    kEI: "wR-4SfmNIMyA-AbluKj5Cg",
    kEXPI: "17259,17291,18169",
    kHL: "fr"
};
var _gjwl = location;
function _gjuc() {
    var a = _gjwl.hash.substring(1);
    if (/(^|&)q=/.test(a) && a.indexOf("#") == -1 && !/(^|&)cad=h($|&)/.test(a)) {
        _gjwl.replace("search?" + a.replace(/(^|&)fp=[^&]*/g, "") + "&cad=h");
        return 1
    }
    return 0
};
window._gjuc && location.hash && _gjuc();

google.y = {};
google.x = function(e, g) {
    google.y[e.id] = [e, g];
    return false
};
window.clk = function(b, c, d, e, f, g, h) {
    if (document.images) {
        var a = encodeURIComponent || escape;
        (new Image).src = ["/url?sa=T", c ? "&oi=" + a(c) : "", d ? "&cad=" + a(d) : "", "&ct=", a(e), "&cd=", a(f), b ? "&url=" + a(b.replace(/#.*/, "")).replace(/\+/g, "%2B") : "", "&ei=wR-4SfmNIMyA-AbluKj5Cg", g].join("")
    }
    return true
};
window.gbar = {
    qs: function() {},
    tg: function(e) {
        var o = {
            id: 'gbar'
        };
        for (i in e) o[i] = e[i];
        google.x(o,
        function() {
            gbar.tg(o)
        })
    }
};

if (google.y) google.y.first = [];
window.setTimeout(function() {
    var xjs = document.createElement('script');
    xjs.src = 'http://www.google.com/extern_js/f/CgJmciswCjgNLCswDjgELCswFjgELCswFzgBLCswGDgDLCswJTjJiAEsKzAnOAAs/4Pb8ykSjyRQ.js';
    document.getElementsByTagName('head')[0].appendChild(xjs)
},
0);
google.y.first.push(
    function(){
        var google_suggest = document.getElementById('google_suggest');
        google.ac.i(
            google_suggest,
            google_suggest.q,
            '',
            ''
        )
    }
)
function _gjp() { ! (location.hash && _gjuc()) && setTimeout(_gjp, 500);
}
window._gjuc && _gjp();

});

wikipedia_action.php的PHP

<?php
$search_field = trim($_POST['wikipedia_field']);
$search_engine = trim($_POST['wikipedia']);
$url_params = preg_replace('/(\ )+/', '+', $search_field);
$url = array('wik_en'=>'http://en.wikipedia.org/wiki/Special:Search?search=', 'wik_fr'=>'http://fr.wikipedia.org/wiki/Special:Search?search=', 'wik_de'=>'http://de.wikipedia.org/wiki/Special:Search?search=', 'wik_ru'=>'http://ru.wikipedia.org/wiki/Special:Search?search=', 'wik_es'=>'http://es.wikipedia.org/wiki/Special:Search?search=');
header('Location:'.$url[$_POST['wikipedia']].$url_params)
?>

其实我有两个问题......

1 - 我注意到Google建议将 kHL:“en”更改为 kHL:“fr”代表法语或 kHL:“de”对于德国人的伎俩,但我不知道如何改变它取决于选中的单选按钮? (没有一些onClick,jQuery应该更好)

2 - 我也没有设置维基百科建议系统,这也是我寻找这个(以及建议改变)的原因。 它在这里使用:

http://en.wikipedia.org/wiki/Special:Search

http://fr.wikipedia.org/wiki/Sp%C3%A9cial:Recherche

http://de.wikipedia.org/wiki/Spezial:Suche

任何帮助将不胜感激;)

2 个答案:

答案 0 :(得分:0)

你有两个独立的脚本吗?换句话说,有一个谷歌建议的页面和一个有WP的建议吗?如果是这样,我建议只使用两个具有唯一ID的表单,允许每个表单单独工作。

隐藏您未使用的那个。当您单击单选按钮切换它们时,隐藏一个表单并显示另一个表单。

答案 1 :(得分:0)

这篇文章应该分为两个单独的问题。至于Google Suggest部分问题。单击单选按钮时,您可以使用以下一些jquery代码来更改kHL:

<script type="text/javascript">
    $(function(){
        $("#google_suggest input[type='radio']").click(function(){
            alert("kHL Before="+window.google.kHL);
            window.google.kHL = this.id.replace('lang_','');    
            alert("kHL After="+window.google.kHL);
        });   
    });
 </script>

但是,虽然您可以通过警报告知kHL正确更改,但GoogleSuggest下拉列表不会更改语言。换句话说,kHL卡在$(document).ready()内设置的内容中。

我唯一能想到的是用onchange()事件动态重新加载googlesuggest.js。这是您需要进一步调查的内容。