12 Stimmen

Deaktiviertes Attribut onClick eines deaktivierten Formularfeldes entfernen

Ich habe ein Formularfeld, das zu Beginn deaktiviert ist und mit einem onClick aktiviert wird. Die onClick nicht Feuer (zumindest in FF) noch tut eine einfache alert(1);.

Die hacky Version ist ein gefälschtes Formularfeld an seiner Stelle, die "aussieht" wie es deaktiviert ist (ausgegraut Stil) und onClick, verstecken Sie es und zeigen das richtige Feld aktiviert, aber das ist hässlich.

Beispiel Code

Das funktioniert:

<input type="text" id="date_end" value="blah" onClick="this.disabled=true;">

Das funktioniert:

<label for="date_end_off" onClick="document.getElementById('date_end').disabled=false">Test</label>
<input type="text" id="date_end" value="blah" onClick="alert(1);" disabled>

Dies schlägt fehl:

<input type="text" id="date_end" value="blah" onClick="alert(1);" disabled>

Dies schlägt fehl:

<input type="text" id="date_end" value="blah" onClick="document.getElementById('date_end').disabled=false" disabled>

5 Stimmen

Entschuldigung, aber ist es nicht etwas seltsam, auch aus der Sicht des Benutzers, ein deaktiviertes Feld zu haben, das aktiviert wird, wenn ich es anklicke? Warum ist es dann deaktiviert?

0voto

Josef Pfleger Punkte 73395

Die Aktivierung eines deaktivierten Elements beim Anklicken macht den Zweck der Deaktivierung zunichte, meinen Sie nicht? Wenn Sie wirklich das Verhalten, das Sie beschreiben, wollen, nur Stil es "deaktiviert" und entfernen Sie diese Stile auf Klick.

0voto

Draco Punkte 15718

Implementieren Sie die Logik des onClick-Ereignisses nicht in den onClick-Wert des Eingabefeldes. Das ist wahrscheinlich der Grund, warum es in Firefox nicht funktioniert. Definieren Sie stattdessen eine Funktion als Wert des onClick-Ereignisses. Zum Beispiel:

<input type="text" id="date_end" value="blah" onClick="doSomething()" disabled>

<script type="text/javascript">
  function doSomething()
  {
    alert("button pressed");
  }
</script>

Es wird sich auch lohnen, sich mit JQuery zu beschäftigen. Sie können damit Attribute von Elementen hinzufügen oder entfernen und alles Mögliche andere machen. Zum Beispiel können Sie die Deaktivierung aus dem Eingabefeld entfernen, indem Sie eine Funktion wie diese schreiben:

<script type="text/javascript">
      function doSomething()
      {
        alert("button pressed");
         $("#date_end").removeAttr('disabled'); //removes the disabled attribut from the  
                                                //element whose id is 'date_end'
      }
</script>

ODER Sie können es wie folgt hinzufügen:

$("#date_end").attr('disabled','true');

Die Jquery-Website ist aquí

0 Stimmen

Ich habe diese Methoden auch ausprobiert, aber ohne Erfolg. Es ist, als ob der Browser vollständig ignoriert onClick auf ein Feld, wenn deaktiviert.

0voto

Gerardo Abdo Punkte 1060

Sie können ein Div über der deaktivierten Eingabe hinzufügen: Sehen Sie sich das an

 <div onclick="javascript:document.forma.demo1.disabled=false;" style="border:0px solid black; padding:00px;">
    <input type=text name="demo1" disabled style="width:30;">
  </div>

0voto

outofcoolnames Punkte 182

Um ein deaktiviertes Element auf der Client-Seite zu aktivieren, sagen wir in Reaktion auf ein Kontrollkästchen aktiviert oder etwas, endete ich mit einer Kombination von JS und jQuery verwenden, siehe unten:

//enable the yes & no RB 
function enable()
{
        var RBNo = "rbnBusinessType";
        var RBYes = "rbnBusinessType";

        //jQuery approach to remove disabled from containing spans            
        $("#" + RBYes).parent().removeAttr('disabled');
        $("#" + RBNo).parent().removeAttr('disabled');

        //enable yes and no RBs
        document.getElementById(RBYes).disabled = false;
        document.getElementById(RBNo).disabled = false;               

}

Nach dem Postback müssen Sie auf die Anfrage wie folgt zugreifen, um an die Werte Ihrer clientseitig aktivierten Elemente zu gelangen:

this._Organization.BusinessTypeHUbZoneSmall = Request.Params["rbnBusinessTypeHUbZoneSmall"] == rbnBusinessTypeHUbZoneSmallYes.ID;

Die Inspiration stammt aus: https://stackoverflow.com/questions/6995738/asp-javascript-radiobutton-enable-disable-not-included-in-postback-ajax für weitere Informationen

0voto

J. Allen Punkte 517

Wenn Sie einfach nur verhindern wollen, dass der Benutzer Daten in Ihr Feld eingibt, sondern stattdessen das Feld mit populate auf ein Ereignis, meine Hack-Lösung war, das Eingabefeld überhaupt nicht zu deaktivieren, aber stattdessen nach der Ausführung meiner onclick o onfocus Funktionen, zum Aufruf blur() so dass der Benutzer das Feld nicht bearbeiten kann.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X