-1

古いサイトでフォーム送信を使用しています。SEO の目的で、これを onClick() 関数に変更して、きれいな URL に移動するようにしましたが、この関数を使用すると、他のフォーム値が php ファイルに取得されません。

以下は私の古いコードです

 <form name="frmSearchTops" id="frmSearchTops" action="/womens/tops/" method="post">
        <select  name="cboCityNameRes" id="cboCityNameRes">
          <option value=''>City</option>
             {foreach from= $arritemCities item=foo}                      
               {if $smarty.post.hdnCityName eq $foo}                                
                  <option value="{$foo}" selected="selected">{$foo}</option>          
               {else}    
                <option value="{$foo}" {if $foo eq 'City'} selected="selected"{/if}>
                     {$foo}
                </option>
               {/if}    
             {/foreach}    
        </select>
    <select name="cboMaterial" id="cboMaterial">
      <option value="">Material</option>
      <option value="CT">Cotton</option>
      <option value="SL">Silk</option>
    </select>
     <input name="btnSearch" type="button" value="Search" id="btnSearch"/>       
 </form>

新しいコードは次のとおりです。ここでは、コントローラー アクションでダミー URL を指定しています。これは、リダイレクトする womens/tops.php ファイルにリダイレクトされますが、選択した種類の素材を取得していません。

JavaScript

 <script type="text/javascript">

          function searchitem()
          {
        $strCity    =   document.getElementById('cboCityNameRes').value;
        window.location.href = "http://www.legacy.com/womens-tops-"+$strCity+".php";
          }
    </script>   

HTML コード

 <select  name="cboCityNameRes" id="cboCityNameRes" onchange="cityChanged()">
      <option value=''>City</option>                  
       {foreach from= $arritemCities item=foo}                        
          {if $smarty.post.hdnCityName eq $foo}                                 
             <option value="{$foo}" selected="selected">{$foo} </option>                      
          {else}    
             <option value="{$foo}" {if $foo eq 'City'} selected="selected"{/if}>
                 {$foo} 
            </option> 
          {/if} 
        {/foreach}    
    </select>                        
   <select name="cboMaterial" id="cboMaterial">
     <option value="">Material</option>
     <option value="CT">Cotton</option>
     <option value="SL">Silk</option>
   </select>                    
    <input name="btnSearch" type="button" value="Search" id="btnSearch" onclick="searchitem()"/>
4

3 に答える 3

1

そのように window.location を実行すると、ページがリダイレクトされます。これは POST ではなく GET リクエストです。

たとえば、クエリ文字列に追加の変数を追加する必要があります

window.location.href = "http://www.legacy.com/womens-tops-" + strCity +".php?something=blah";

そして、呼び出されたPHPで何かが何とかなるでしょう。

もう 1 つの簡単な方法は、パスが「womens-tops-$strCity」になるように jQuery (または必要に応じてプレーンな JavaScript) を使用してフォームのアクションを変更し、フォームを送信することです。

var strCity = document.getElementById('cboCityNameRes').value;
var frm = document.getElementById('frmSearchTops')
frm.action = "/womens-tops-" + strCity + ".php";
frm.submit();

またはjQuery

var strCity = $('#cboCityNameRes').val();
$("#frmSearchTops").attr("action", "/womens-tops-" + strCity + ".php");
$("#frmSearchTops").submit();

ただし、検索エンジン ロボットは JavaScript をまったく実行しません。したがって、これは SEO に関して実際には何もしていません。少なくともあなたの例からわかる限り。ただし、これを行う他の理由があるかもしれないので、答えはまだ有効です。

于 2013-01-16T05:51:57.123 に答える
0

関数を呼び出す onchange イベントを使用して選択してcityChangedいますが、関数のみを投稿しましたsearchitem

それにもかかわらず、次のようなことを行う select に選択された値を渡すことができます。

<select  name="cboCityNameRes" id="cboCityNameRes" onchange="cityChanged(this.value)">
...
</select>

次に、次のような関数引数の値を使用します。

function cityChanged(city){
    var material = document.getElementById("cboMaterial").options[document.getElementById("cboMaterial").selectedIndex].value;
    // window.location.href = "http://www.legacy.com/womens-tops-"+city+".php"
    // add material to the URL somewhere?
}
于 2013-01-16T05:48:08.203 に答える
0

これを試して

function cityChanged(val) {
var value = val.options[val.selectedIndex].value;  
window.location.href = "http://www.legacy.com/womens-tops-"+value+".php";
}

HTMLは次のようになります。

<select  name="cboCityNameRes" id="cboCityNameRes" onchange="cityChanged(this)">

これがうまくいくことを願っています

于 2013-01-16T05:55:40.097 に答える