2017-12-07 3 views
0

Ich versuche eine Eingabe zu deaktivieren, während der Benutzer eine andere Eingabe ausfüllt. Ich habe es geschafft, einen der beiden Eingänge zu deaktivieren, während der andere Eingang gefüllt wird.Deaktivieren Sie vorübergehend ein Eingabefeld, wenn das zweite Eingabefeld ausgefüllt ist

Das Problem ist, dass ich möchte, dass die deaktivierte Eingabe NUR deaktiviert wird, während der andere Eingang eingegeben wird. Also, wenn Der Benutzer ändert seine Meinung an der ersten Eingabe, er kann löschen, was in der aktuellen Eingabe ist, was die zweite Eingabe verfügbar macht und die erste deaktiviert.

JS

var inp1 = document.getElementById("input1"); 
inp1.onchange = function() { 
    if (this.value != "" || this.value.length > 0) { 
     document.getElementById("input2").disabled = true; 
    } 
} 

HTML

<input type="text" id="input1"> 
<input type="text" id="input2"> 
+1

Benutzer kann nicht gleichzeitig in zwei Orten geben. Verhaltenslogik macht keinen Sinn. – charlietfl

+2

Es klingt wie die Idee ist, die erste Eingabe zu deaktivieren, solange die zweite Eingabe Text enthält und umgekehrt. Das Fehlen von Text in beiden würde dem Benutzer die Option geben, jedes Feld zu bearbeiten, wenn ich es richtig verstehe. – ThisClark

+0

Was macht keinen Sinn? Wenn der Benutzer eine Eingabe eingibt, ist die andere deaktiviert.Wenn der Benutzer seine Meinung ändert und den Inhalt dieser einen Eingabe löscht, wird die andere Eingabe wieder aktiviert. –

Antwort

2

Zuerst würde ich input verwenden, anstatt change. Dann müssen Sie disabled zurück auf false setzen, wenn die Eingabe leer ist. Ihre Überprüfung, ob es leer ist, ist redundant, Sie nur weder Seite von Ihrem ||, nicht beide. So

:

var inp1 = document.getElementById("input1"); 
 
inp1.oninput = function() { 
 
    document.getElementById("input2").disabled = this.value != ""; 
 
};
<input type="text" id="input1"> 
 
<input type="text" id="input2">

... und dann natürlich, wenn Sie es gegenseitigen sein wollen, das gleiche für input2.

+0

* (Doh! Wenn Sie "... wenn die Eingabe nicht leer ist ..." oben, drücken Sie Refresh.) * –

+0

Fast perfekt, außer wenn ich auf die 2. Eingabe gehe und zu tippen, ist die erste Eingabe immer noch aktiviert, anstatt zu deaktivieren. Die Eingaben müssen abwechselnd aktiviert oder deaktiviert werden, abhängig davon, ob ein Benutzer sie gerade eingibt. –

+0

@SterlingKing: * "... und dann natürlich, wenn du willst, dass es gegenseitig ist, das gleiche für Input2" * direkt am Ende der Antwort. Beachten Sie auch, dass Ihre [akzeptierte Antwort] (https://stackoverflow.com/a/47701903/157247) mit 'keyup' unzuverlässig ist. –

0

EDIT: onkeydown wurde nicht auf die erste Presse onkeyup funktioniert nicht. Dies überprüft jedes Textfeld onkeyup Wenn man Text hat, wird es den anderen deaktivieren, aber wenn Benutzer den Text löscht, wird es den anderen wieder aktivieren.

function checkText() { 
 
    var inp1 = document.getElementById("input1"); 
 
    var inp2 = document.getElementById("input2"); 
 

 
    if (inp1.value !== "" || inp1.value.length > 0) { 
 
    document.getElementById("input2").disabled = true; 
 
    } else { 
 
    document.getElementById("input2").disabled = false; 
 
    } 
 
    if (inp2.value !== "" || inp2.value.length > 0) { 
 
    document.getElementById("input1").disabled = true; 
 
    } else { 
 
    document.getElementById("input1").disabled = false; 
 
    } 
 
}
<input type="text" onPaste="return false" onkeyup="checkText()" id="input1"> 
 
<input type="text" onPaste="return false" onkeyup="checkText()" id="input2">

+0

'keydown' ist keine zuverlässige Möglichkeit, Benachrichtigungen zu sehen, wenn sich der Wert ändert (z. B. Einfügen). –

2

Sie können diese mit Fokus und Unschärfe erreichen. Unten ist es mit JQuery gemacht.

$(function() { 
 
    $('#input1').focus(function(){ 
 
     $('#input2').prop('disabled', 'disabled'); 
 
    }).blur(function(){ 
 
    $('#input2').prop('disabled', ''); 
 
    }); 
 
    
 
    $('#input2').focus(function(){ 
 
     $('#input1').prop('disabled', 'disabled'); 
 
    }).blur(function(){ 
 
    $('#input1').prop('disabled', ''); 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input type="text" id="input1"> 
 
<input type="text" id="input2">

+0

Gute Alternative +1, aber deaktiviert nicht die Eingabe. Wenn die anderen es nicht herausfinden können, wird Ihre Antwort gewählt. –

1

Wie wäre es mit keyup?

Gefällt mir dies;

var inp1 = document.getElementById("input1"); 

var inp2 = document.getElementById("input2"); 

inp1.onkeyup = function() { inputValidation(this, inp2); } 

inp2.onkeyup = function() { inputValidation(this, inp1); } 

function inputValidation(origin, lock) { 
    var response = hasValue(origin.value); 
    lock.disabled = response; 
} 

function hasValue(value) { 
    return value != "" && value.length > 0; 
} 

https://jsfiddle.net/8o3wwp6s/

+0

'keyup' ist keine zuverlässige Möglichkeit, Benachrichtigungen zu sehen, wenn sich der Wert ändert (z. B. Einfügen). –

+0

Ich verstehe nicht warum. Hast du die Geige überprüft? Es deaktiviert beide Eingaben, auch wenn Sie kopieren und einfügen. Können Sie ein Szenario bereitstellen, in dem es fehlschlägt? – Morilon

+0

Sicher: 1. Kopieren Sie etwas in Ihre Zwischenablage. 2. Klicken Sie mit der rechten Maustaste auf eine Eingabe. 3. Wählen Sie Einfügen aus dem Menü. Jetzt hat die Eingabe Text, aber die andere Eingabe ist nicht deaktiviert - weil es kein 'keyup'-Ereignis gab. Wie ich in meiner Antwort gesagt habe, ist das korrekte Ereignis 'input', nicht' keyup', nicht 'keydown'. –

0

nicht es schwieriger machen Sie, als es ist, das ist einfach.

var one = document.getElementById('one'); 
 
var two = document.getElementById('two'); 
 

 
//checks instantly 
 
var checker = setInterval(function() { 
 
    if(two.value !== '') { 
 
     one.disabled = true; 
 
    } else { 
 
     //when its clear, it enabled again 
 
     one.disabled = false; 
 
    } 
 
    if(one.value !== '') { 
 
     two.disabled = true 
 
    } else { 
 
     two.disabled = false; 
 
    } 
 
}, 30);
<input id="one"> 
 
<input id="two">

+1

Es gibt keinen Grund, einen ständig laufenden Intervall-Timer dafür zu verwenden. –

Verwandte Themen