Форма JavaScript для перенаправления поисковой системы - PullRequest
2 голосов
/ 11 февраля 2010

Я пытаюсь создать форму, которая будет принимать данный текст и направлять вас к выбранной поисковой системе с текстом в качестве запроса. У меня проблемы с получением (ре) прямого JavaScript.

Интересно то, что если вы сделаете ввод ввода кнопкой и сделаете onClick = "searchForm", а затем нажмите на нее, она будет работать. Но тогда вы не можете набрать и просто нажмите Enter для поиска .. что мне необходимо.

Кроме того, если есть какой-то лучший, но совершенно другой способ сделать это, я бы с удовольствием это услышал.

Спасибо.

РЕДАКТИРОВАТЬ: Полностью изменил код, чтобы соответствовать тому, что сказал meouw, что было гораздо более ясно, чем то, что я имел изначально, так что спасибо. Я знаю, что HTML был испорчен, в основном потому, что я все вокруг менял, пытаясь заставить JavaScript работать. Так что даже сейчас, когда я все прояснил, у меня все та же проблема.

Я знаю, что что-то упускаю, потому что, если вы поставите предупреждение ('кошка'); после изменения URL-адреса в JavaScript вы можете видеть, что браузер был перенаправлен на поиск, но как только вы нажмете OK в предупреждении, вы вернетесь назад. Вы даже можете вернуться в историю своего браузера, чтобы перейти на страницу поиска.

ИЗМЕНИТЬ СНОВА: Хорошо, спасибо. Возвращать ложь было то, что мне было нужно все время. Спасибо за помощь.

ФИНАЛЬНЫЙ КОД:

<script type="text/javascript">
    function doSearch( f ) {
        var searchTerm = f.searchText.value;

        if( !searchTerm ) {
            //tell user to enter a search string
            // cancel the request by returning false
            return false;
        }

        var sel = f.whichEngine;
        var selectedEngine = sel[sel.selectedIndex].value;
        var engineUrl;

        switch( selectedEngine ) {
        case 'google_web':
            engineUrl = 'http://www.google.com/search?q=';
            break;
        case 'bing_web':
            engineUrl = 'http://www.bing.com/search?q=';
            break;
        case 'yahoo_web':
            engineUrl = 'http://search.yahoo.com/search?p=';
            break;
        case 'google_images':
            engineUrl = 'http://www.images.google.com/images?q=';
            break;
        case 'bing_images':
            engineUrl = 'http://www.bing.com/images/search?q=';
            break;
        case 'yahoo_images':
            engineUrl = 'http://images.search.yahoo.com/search/images?p=';
            break;
        }

        engineUrl += searchTerm;
        window.location.assign(engineUrl);
        return false;
    }

</script>
<form onsubmit="return doSearch(this)">
    <fieldset>
        <legend>Search</legend>
        <ul>
            <li>
                <input type="text" name="searchText" id="searchText" size="41" maxlength="2048" />
            </li>
            <li>
                <select name="whichEngine" id="whichEngine">
                    <optgroup label="Web">
                        <option id="GoogleWeb" value="google_web" checked="checked">Google Web</option>
                        <option id="BingWeb" value="bing_web">Bing Web</option>
                        <option id="YahooWeb" value="yahoo_web">Yahoo! Web</option>
                    </optgroup>
                    <optgroup label="Images">
                        <option id="GoogleImages" value="google_images">Google Images</option>
                        <option id="BingImages" value="bing_images">Bing Images</option>
                        <option id="YahooImages" value="yahoo_images">Yahoo! Images</option>
                    </optgroup>
                </select>
                <input type="submit" value="Search">
            </li>
        </ul>
    </fieldset>
</form>

Ответы [ 2 ]

1 голос
/ 11 февраля 2010

Ваша главная проблема в этом

window.location.assign(finalSearchString);

должно быть

window.location = finalSearchString;

window.location.href = finalSearchString;

Другие вещи:

Ваша разметка странная
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *. * * * * * * * * * * * * * * * * * * * * * * * * * * * * Вывод вашей функции на отправку формы на случай, если вы хотите отменить поиск Вам не нужны метки и ссылки в опциях - вместо использования самозакрывающихся тегов опций поместите текст в опцию и присвойте ей значение, которое может быть прочитано вашим сценарием. Это безопаснее, если вы добавите дополнительные параметры позже

<form onsubmit="return doSearch(this)">
....
<optgroup label="Google">
    <option value="google_search">Google Web</option>
    <option value="google_images">Google Images</option>
</optgroup>
....
</form>

<script type="text/javascript">

function doSearch( f ) {
    var searchTerm = f.searchText.value;

    if( !searchTerm ) {
        //tell user to enter a search string
        // cancel the request by returning false
        return false;
    }

    var sel = f.whichEngine;
    var selectedEngine = sel[sel.selectedIndex].value;
    var engineUrl;

    switch( selectedEngine ) {
        case 'google_search':
            engineUrl = 'http://www.google.com/search?q=';
            break;
    ....
    }

    engineUrl += searchTerm;
    window.location.href = engineUrl;

}

</script>
0 голосов
/ 11 февраля 2010

Вы хотите отправить форму для поиска по указанному адресу, верно?

Замените эту строку своего кода:

function startSearch(){
  // ...................
  // ...................
  // ...................

  window.location.assign(finalSearchString);
}

С:

function startSearch(){
  // ...................
  // ...................
  // ...................

  if (finalSearchString)
  {
    document.searchForm.action = finalSearchString;
    document.serachForm.submit();
    return true;
  }
  else
  {
    return false;
  }

И, наконец, измените свой тег form на:

<form name="searchForm" onSubmit="return startSearch();">
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...