1

VB.NetページのJavaScriptの「window.location」の値を変更して、ブラウザをリダイレクトしたいと思います。[実行]ボタンをクリックすると、以下のコードが正しく機能します。アラートが表示され、ブラウザが正常にリダイレクトされます。テキスト内から「Enter」を押しても同じことが起こるはずです。これは機能しません。アラートは表示されますが、ブラウザは同じページにとどまります。

ASPマスターページへの参照を削除すると、「入力」機能が機能し始めます。そのため、キープレスイベントを処理し、リダイレクト命令を強制終了している可能性がありますか?

ところで、私はもともと.Netコンポーネントを使用してこれを「通常」実行し、送信ボタンがクリックされたときにポストバックを実行していました。しかし、それは奇妙なことにターゲットページを2回ロードし、ページのちらつきを引き起こし、一般的に非効率的でした。とにかく、.Netのオーバーヘッドをすべて含む理由は見当たらなかったので、クライアント側の簡単なスクリプトでそれを実行したいと思いました。

.Netの干渉にもかかわらず、「Enter」キー機能を機能させる方法を知っている人はいますか?または、間違ったツリーを吠えているので、通常の.Netポストバックに戻る必要がありますか?

<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">

<script type="text/javascript">
  function clickHandler() {
    var dropdown = document.getElementById("dropdown");
    var entityID = document.getElementById("textOne").value;
    var destination = dropdown.options(dropdown.selectedIndex).value + entityID;
    alert(destination);
    location = destination;
  }

  function goIfEnterPressed() {
    if ((event.which && event.which != 13) || (event.keyCode && event.keyCode != 13)) {
      return false;
    }
    clickHandler();
  }

</script>
</asp:Content>
<asp:Content ContentPlaceHolderID="ContentPlaceHolder2" runat="server">
  <select id="dropdown">
    <option value="Page1.aspx?typeOneID=">One</option>
    <option value="Page2.aspx?typeTwoID=">Two</option>
    <option value="Page3.aspx?typeThreeID=">Three</option>
  </select>
  <br />
  <input id="textOne" onkeypress="goIfEnterPressed()"/>
  <br />
  <input type="button" value="Go" onclick="clickHandler()" />
</asp:Content>
4

3 に答える 3

0

あなたのenterイベントは.Netjavascriptのものによって捕らえられているかもしれません。通常、このような場合は、作業を行う前に、イベントのデフォルトの動作を防止します。jQueryを使用するかどうかはわかりませんが、コードは次のようになります。

  $('#buttonid').keydown(function(e) {
     if (e.keyCode == 13) {
       e.preventDefault();
       //do whatever you want here.
     }
   });
于 2011-05-17T18:21:39.450 に答える
0

MasterPageのコンテンツ内のどこかにボタンがありますか?これは.NETの問題ではなく、HTML標準の誤解である可能性があります。すべてのコンテンツが1つの要素内にあるため、ブラウザはページで最初に見つけたボタンに<form>基づいてページを送信します。<submit>これを回避するには、コンテンツを内にグループ化し、<asp:Panel>そのDefaultButtonプロパティを送信ボタンのIDに設定します。テキストボックスとボタンの両方のプロパティを設定しValidationGroupて同じことを実行できる場合もありますが、それがこの状況で機能するのか、それとも検証コントロールにのみ影響するのかはわかりません。

于 2011-05-17T18:34:21.600 に答える
0

イベントをイベントハンドラーに渡していない。これは問題の一部である可能性があります-少なくともIE以外のブラウザでは。

<input id="textOne" onkeypress="goIfEnterPressed(event)"/>

function goIfEnterPressed(e) {
    if (e.keyCode == 13) {
        clickHandler();
    }
}

また、Enterキー以外のキーに対して本当にfalseを返したいですか?イベントをキャンセルしようとしているようですが、書面どおりには機能しないと思います。ただし、それが機能した場合は、テキストボックスにテキストを入力できなくなります。奇妙な振る舞いのようです。

于 2011-05-17T18:44:10.137 に答える