2017-11-19 13 views
0

問題があります。私は自分のウェブサイトから直接外部の検索エンジンを使用しようとしますが、JavaScriptは自動的にURLを変更するようですが、理由はわかりません。ここでJavaScript経由でURLを開くと、結果の代わりに?results = aaaにリダイレクトされますか?q = aaa

は私のJavaScriptコードです:

var form = document.querySelector('#my-form'), 
    text_field = document.querySelector('#results'); 

    function submitHandler(){ 
     window.open('https://myurl.com/results?q=' + text_field.value); 
     win.focus(); 
    } 

    // attach custom submit handler 
    form.onsubmit = submitHandler; 

そして、ここでは私のhtmlフォームのコードです:

<form method="get" id="my-form"> 
<input type="text" name="results" id="results" value="" placeholder="Search..."> 
</form> 

このコードは https://myurl.com/?results=aaa代わりのhttps://myurl.com/results?q=aaaにリダイレクトされるのはなぜ?

+3

は、ルーティングとサーバー側の問題ではなく、クライアント側の問題のように聞こえます。また、新しいウィンドウで変数 'win'を使って作業する場合は、' var win = window.open(...) 'を宣言してそれを割り当てる必要があります。最後に、現在のウィンドウやフォームのリダイレクトページがフォーカスを取得していない限り、最初に 'win.focus()'は必要ありません。 –

+0

投稿コードが想定どおりに機能し、問題を再現することができないため、この質問を議論の対象外とする投票。ほとんどのOPは、何らかの種類のサーバー側リダイレクトを経験しています。 –

+0

説明のためにスコットありがとうございました。本当に便利です! – mrblue

答えて

2

デフォルトの動作を提出防ぐ必要があります。

function submitHandler(e){ 
    e.preventDefault(); 
    window.open('https://myurl.com/results?q=' + text_field.value); 
    win.focus(); 
} 

提出ハンドラは、イベントオブジェクトが渡されます。この場合e。メソッドpreventDefaultを呼び出すと、デフォルトの動作が妨げられ、目的の結果が得られます。ここで

はフィドルです: https://jsfiddle.net/m5h132nj/

+1

あなたの次の行が 'win.focus()'になる場合、 'var win = window.open(...)'をしてはいけませんか?そして、この答えは実際に問題に取り組んでいるのか、問題を解決するのですか? OPが新しいウィンドウを提出して開きたいと思うかもしれませんか? –

+0

それは働いている!ありがとうございます! – mrblue

+0

@MrBlueこれは正解ではありません。元のコードはそのまま動作します変更されていない元のコードがここにあります:https://jsfiddle.net/r9ftg0tn/2/提出されるフォームは、あなたの 'window.open()'ステートメントとは関係ありません。 –

関連する問題