2017-11-18 17 views
0

これはjqueryで解答しているのを見ましたが、私はJavaScriptでどのように行うことができますか?これまでのところ、私は次のことを考え出しましたが、nameF.valueを正しくキャプチャしていないことを理解しています。field.valueが空のときに入力ボタンを無効にする

var nameF = document.getElementById("name-field"); 
 

 
var formButton = document.getElementById("form-button"); 
 

 
function go() { 
 
    if (nameF.value == "") { 
 
    formButton.classList.add("notclickable"); 
 
    } 
 
} 
 

 
go();
#form-button { 
 
    cursor: pointer; 
 
    outline: none; 
 
    border: none; 
 
    font-family: $body-font; 
 
    font-size: 14px; 
 
    padding: 16px; 
 
    color: #fff; 
 
    font-weight: 800; 
 
    background-color: #000; 
 
    position: relative; 
 
    border-radius: 2px; 
 
    opacity: 1; 
 
} 
 

 
#form-button.notclickable { 
 
    opacity: .1; 
 
    pointer-events: none; 
 
}
<input type="text" name="name" class="form-style form-field" id="name-field" placeholder="Your name"> 
 
<input type="submit" value="Send" id="form-button"> 
 
https://stackoverflow.com/questions/ask#

私はバニラを使用して、jQueryのせずに、それをどのように行うことができますか?

ありがとうございました!

+0

あなたが探している行動に依存します。ページが読み込まれ、ユーザが入力を行う前に 'go()'を一度呼び出すだけです。 – charlietfl

+0

'.keyup'イベントは' button'要素の 'disabled'属性をトグルします。 –

答えて

3

nameFadd()の代わりに.toggle()に割り当てられたイベントハンドラが必要です。

.toggle()は、クラスを追加または削除する必要があるかどうかを示すオプションの第2引数を受け取ります。そこで、比較する文字列を渡します。

var nameF = document.getElementById("name-field"); 
 

 
var formButton = document.getElementById("form-button"); 
 

 
function go() { 
 
    formButton.classList.toggle("notclickable", nameF.value == ""); 
 
} 
 

 
go(); 
 

 
nameF.addEventListener("input", go);
#form-button { 
 
    cursor: pointer; 
 
    outline: none; 
 
    border: none; 
 
    font-family: $body-font; 
 
    font-size: 14px; 
 
    padding: 16px; 
 
    color: #fff; 
 
    font-weight: 800; 
 
    background-color: #000; 
 
    position: relative; 
 
    border-radius: 2px; 
 
    opacity: 1; 
 
} 
 

 
#form-button.notclickable { 
 
    opacity: .1; 
 
    pointer-events: none; 
 
}
<input type="text" name="name" class="form-style form-field" id="name-field" placeholder="Your name"> 
 
<input type="submit" value="Send" id="form-button"> https://stackoverflow.com/questions/ask#

また、あなたはボタンを無効にするクラスを必要としないことに注意してください。 :disabledセレクタでdisabledプロパティを使用することができます。これは単に機能を無効にするのではなく、機能を無効にします。

var nameF = document.getElementById("name-field"); 
 

 
var formButton = document.getElementById("form-button"); 
 

 
function go() { 
 
    formButton.disabled = nameF.value == ""; 
 
} 
 

 
go(); 
 

 
nameF.addEventListener("input", go);
#form-button { 
 
    cursor: pointer; 
 
    outline: none; 
 
    border: none; 
 
    font-family: $body-font; 
 
    font-size: 14px; 
 
    padding: 16px; 
 
    color: #fff; 
 
    font-weight: 800; 
 
    background-color: #000; 
 
    position: relative; 
 
    border-radius: 2px; 
 
} 
 

 
#form-button:disabled { 
 
    opacity: .1; 
 
    pointer-events: none; 
 
}
<input type="text" name="name" class="form-style form-field" id="name-field" placeholder="Your name"> 
 
<input type="submit" value="Send" id="form-button"> https://stackoverflow.com/questions/ask#

+0

ロックスターありがとう!私は "入力"イベントを知らなかった。完璧に働いた。 :) –

+1

ようこそ。ちょうど 'keypress'のようなイベントに比べて若干新しくなっていることに気をつけてください。それでも、現代のブラウザはすべてサポートしています。 –

+0

ところで、 '= 'の意味を理解できないようです。 ' formButton.disabled = nameF.value == ""'; どのように動作しますか?現在の言語に翻訳することができますか? –

1

そのような何かを試してみてください!

var nameF = document.getElementById("name-field"); 
 

 
var formButton = document.getElementById("form-button"); 
 

 
function onChangeContent(e) { 
 
    formButton.disabled = e.target.value !== '' ? false : true; 
 
} 
 

 
nameF.addEventListener('keyup', onChangeContent);
<input type="text" name="name" class="form-style form-field" id="name-field" placeholder="Your name"> 
 
<input type="submit" value="Send" id="form-button" disabled>

関連する問題