ドロップダウン リストを作成したいページがあり、現在表示しているのと同じページにポスト バックします。
これどうやってするの?
1 つのキャッチは、ドロップダウン リストがオーバーライドするものである 1 を除いて、すべてのクエリ文字列の値も同じにすることです。
ドロップダウン リストを作成したいページがあり、現在表示しているのと同じページにポスト バックします。
これどうやってするの?
1 つのキャッチは、ドロップダウン リストがオーバーライドするものである 1 を除いて、すべてのクエリ文字列の値も同じにすることです。
必要に応じて、同じページでクエリ文字列とフォーム変数の両方を使用できます。アクションを使用<form method="post">
して空のままにすると、フォームが現在のページに戻されるため、1つの問題が解決されました。注意点が1つあります。アクションを空のままにしておくと、クエリ文字列パラメータがそのまま維持されるかどうかはわかりません。
そうでない場合は、次のようなことを試すことができます:(<form method="post" action="index.asp?<%= request.querystring %>">
正確な構文についてはわかりませんが、要点は、現在のページを指定し、メソッドに現在のクエリ文字列変数を追加する必要があるということです)。
投稿後のページのASPコードで、request.formとrequest.querystringの両方を確認できます。request.formには、フォームの投稿変数が含まれます。request.querystringには、?の背後にある変数が含まれます。あなたのURLで。
HTH、エリック
Javascript メソッド:
<html>
<head>
<script>
function jumpto(whatform, querykey) {
//get the url querystring
var url = window.location.search;
//the replace query
var queryrx = new RegExp("([?&])" + querykey + "=[^\&]+(?=&|$)", "gi");
//which item selected in dropdown
var index=whatform.pageselect.selectedIndex;
//if the first option, ignore it since it is blank
if (whatform.pageselect.options[index].value != "0") {
//is a query string available
if (url.length>0) {
//our query key is present
if (queryrx.test(url)) {
//now we replace the querystring from old to new
url = url.replace(queryrx, '$1' + querykey + '='+whatform.pageselect.options[index].value);
//clear out the question mark from the querystring
url = url.replace("?", '');
//our query key is not present, but there is querystring data
}else{
url = url.replace("?", '');
url = querykey + "=" + whatform.pageselect.options[index].value + "&" + url;
}
//no querystring data exists
}else{
url = querykey + "=" + whatform.pageselect.options[index].value;
}
//alert(url);
//this is the url we are getting bounced to
location = "mypage.asp?"+url;
}
}
</script>
</head>
<body>
<FORM NAME="form1">
<SELECT NAME="pageselect" ONCHANGE="jumpto(this.form, 'thequerykey')" SIZE="1">
<OPTION VALUE="">Choose a Page</OPTION>
<OPTION VALUE="pageA">First Page</OPTION>
<OPTION VALUE="pageB">Second Page</OPTION>
</SELECT>
</FORM>
</body>
</html>
ASPクラシックソリューションを使用する場合は、関数を使用してクエリ文字列から古い値をクリアする必要があります https://stackoverflow.com/a/1221672/2004151 そして、クエリ文字列を非表示の入力フィールドとして出力しますフォーム (以下の MyFunctionResultsExceptPageSelect)。何かのようなもの:
<FORM ACTION="mypage.asp" METHOD="GET" NAME="form3">
<%=MyFunctionResultsExceptPageSelect("pageselect")%>
<SELECT NAME="pageselect" ONCHANGE="document.form3.submit()" SIZE="1">
<OPTION VALUE="">Choose a Page</OPTION>
<OPTION VALUE="pageA">First Page</OPTION>
<OPTION VALUE="pageB">Second Page</OPTION>
</SELECT>
</FORM>
<%
Function MyFunctionResultsExceptPageSelect(key)
Dim qs, x
For Each x In Request.QueryString
If x <> key Then
qs = qs & "<input type=""hidden"" name="""&x&""" value="""&Request.QueryString(x)&""" />"
End If
Next
MyFunctionResultsExceptPageSelect = qs
End Function
%>
手動で指定する代わりに現在のページを取得する場合は、次を使用します。JavaScript スニペットでは、こちらの回答を使用してください: https://stackoverflow.com/a/5817566/2004151 ASP では、次のようなものです: http://classicasp.aspfaq.com/files/directories-fso/how-do- i-get-the-name-of-the-current-url/page.html