0

これは私のログオン ビューです。

@model SuburbanCustPortal.Models.LogOnModel

@{
    ViewBag.Title = "Log On";
}

<h2>Log On</h2>
<p>
  Please enter your user name and password. @Html.ActionLink("Register", "Register") if you don't have an account.
</p>

<p>
  If only you wish to make a payment on your account and do not want to create a website login, @Html.ActionLink("click here", "RedirectToPaymentPage", "Account").
</p>


@Html.ValidationSummary(true, "Login was unsuccessful. Please correct the errors and try again.")

@using (Html.BeginForm()) {
    <div>
        <fieldset>
            <legend>Account Information</legend>

            <div class="editor-label">
                @Html.LabelFor(m => m.UserName)
            </div>
            <div class="editor-field focus">
                @Html.TextBoxFor(m => m.UserName, new { @class = "GenericTextBox", onkeyup = "enableLogonButton()" })
                @Html.ValidationMessageFor(m => m.UserName)
            </div>

            <div class="editor-label">
                @Html.LabelFor(m => m.Password)
            </div>
            <div class="editor-field">
                @Html.PasswordFor(m => m.Password, new { @class = "GenericPasswordBox", onkeyup = "enableLogonButton()" })
                @Html.ValidationMessageFor(m => m.Password)
            </div>

            <div class="editor-label">
                @Html.CheckBoxFor(m => m.RememberMe)
                @Html.LabelFor(m => m.RememberMe)
            </div>

          <p>
            <button name="btn" value="Log On" onclick="disableButton()" disabled="disabled">Log On</button>
          </p>

          <p>
            If you need to retrieve your username @Html.ActionLink("click here.", "ForgotUsername", "Account")<br/>
            If you need to reset your password @Html.ActionLink("click here.", "ForgotPassword", "Account")
          </p>

        </fieldset>
    </div>
}

これは私のwidget.jsです:

function enableLogonButton() {
  if ($('#UserName').val() == "") {
    $('#btn').attr('disabled', 'disabled');
    return;
  }
  if ($('#Password').val() == "") {
    $('#btn').attr('disabled', 'disabled');
    return;
  }
  $('#btn').removeAttr('disabled');
}

    function logonDisableSubmitButtons(clickedButton) {

        $("input[type='button']").each(function() {
          if (this.name != clickedButton)
            $(this).attr("disabled", "disabled");
          else {
            //hiding the actually clicked button
            $(this).hide();
            //Creating dummy button to same like clicked button
            $(this).after('<input type="button" disabled="disabled" value="' + $(this).val() + '" class="' + $(this).attr('class') + '" />');
          }
        });

      }

      function disableButton() {

        $('#btn').click(function (e) {
          $(this).attr('disabled', 'disabled');
        });


      }

何をしてもボタンが有効になっていません。

私が望んでいるのは2つのことです:

  1. ユーザーのログオンとユーザー名に何かがある場合は、送信ボタンを有効にします。
  2. 送信をクリックすると、ボタンが無効になるため、2 回クリックすることはできません。

私はどちらとも運がありません。

以下に提案されている変更を行いましたが、フィールドに何かを入力してもボタンが有効になりません

**さらなるテスト**

次のように提案されたように、アラート()を追加しました。

function enableLogonButton() {
  alert("start");
  if ($('#UserName').val() == "") {
    alert("username");
    $('#btn').attr('disabled', 'disabled');
    return;
  }
  if ($('#Password').val() == "") {
    alert("password");
    $('#btn').attr('disabled', 'disabled');
    return;
  }
  alert("enabled");
  $('#btn').removeAttr('disabled');
}

それらの1つも発砲していません。少なくとも、プロンプトが表示されません。

そこで、JScript が表示されるように呼び出しを変更しました。

@Html.PasswordFor(m => m.Password, new { @class = "GenericPasswordBox", onkeyup = "enableLogonButtonX()" })

そして、私はこのメッセージを受け取ります:

Microsoft JScript ランタイム エラー: 'enableLogonButtonX' は定義されていません

したがって、JScript を見ていると思います。

次にこれを追加しました:

<script>
    function myFunction() {
      alert("hit!");
    }
</script>

そしてこれを変更しました:

 <button name="btn" value="Log On" onclick="myFunction()" disabled="disabled">Log On</button>

そして、私の「ヒット」はうまくいきました。したがって、onclickも機能していると思います。

4

3 に答える 3

2

disabled属性ではなくブール型のプロパティです。

設定するには:

$('#btn').attr('disabled', 'disabled');

クリアするには:

$('#btn').removeAttr('disabled')
于 2012-11-27T17:58:19.887 に答える
1

私があなたの質問を十分に読んでいない限り(確かに、ここは5時過ぎ...ビールの時間なのでそうかもしれません)、または質問にタイプミスがない限り、エラーメッセージはあなたにすべてを与えると思いますこれをデバッグする必要があります。

メッセージは次のとおりです。Microsoft JScript runtime error: 'enableLogonButtonX' is undefined

関数名は次のとおりです。enableLogonButton

したがって、エラーメッセージによると、関数を呼び出してenableLogonButtonX()いますが、関数の名前はenableLogonButton. これに変更します。

@Html.PasswordFor(m => m.Password, new {
        @class = "GenericPasswordBox", 
        onkeyup = "enableLogonButton()" })
于 2012-11-27T23:08:50.663 に答える
0

disable 属性の値を変更する代わりに、要素から完全に削除します。

つまり、これを置き換えます

$('#btn').attr('disabled', false);

$('#btn').removeAttr('disabled');
于 2012-11-27T17:59:00.260 に答える