JavaScriptを使用して無効化された属性を入力要素に追加する


141

入力ボックスがあり、フォームを移植するときの問題を回避するために、それを無効にして同時に非表示にしたいです。

これまでのところ、入力を非表示にする次のコードがあります。

$(".shownextrow").click(function() { 
    $(this).closest("tr").next().show().find('.longboxsmall').hide();
});

これは、結果として非表示になる入力です。

<input class="longboxsmall" type="text" />

無効な属性を入力に追加するにはどうすればよいですか?

回答:


306

$("input").attr("disabled", true); 現在...もう分からない。

2013年12月です。何を伝えればよいのか本当にわかりません。

最初はいつも.attr()だったし、それはいつも.prop()だったので、私はここに戻って答えを更新し、より正確にした。

それから1年後、jQueryは再び考えを変えました。私はこれを追跡したくありません。

要するに、現時点では、これは最良の答えです。「両方を使用できますが、状況によって異なります。」

代わりにこの回答を読む必要があります:https : //stackoverflow.com/a/5876747/257493

そして、その変更に関する彼らのリリースノートはここに含まれています:

.attr()も.prop()も値の取得/設定には使用しないでください。代わりに.val()メソッドを使用します(ただし、.attr( "value"、 "somevalue"を使用します)は、1.6以前と同様に引き続き機能します)。

優先使用法の要約

.prop()メソッドは、ブール型の属性/プロパティ、およびHTMLに存在しないプロパティ(window.locationなど)に使用する必要があります。他のすべての属性(htmlで確認できるもの)は、.attr()メソッドで引き続き操作できます。

または言い換えれば:

「.prop =非ドキュメントのもの」

".attr" =ドキュメントのもの

... ...

ここで、APIの安定性に関するレッスンを学んでください。


3
更新テキストを私が注意を払うのに十分な大きさにするための+1
Vael Victus

@VaelVictusそれほど速くありません。私がこれを投稿してから1年後に再び変更したとは申し訳ありません...この答えを忘れてしまいました。この回答をお読みください:stackoverflow.com/a/5876747/257493
シークレットモード

1
.propと.attrの間のドキュメント/非ドキュメントの区別は無限に役立ち、コンテキストがこのような簡潔な方法で組み立てられたのを見たことがありません。とても有難い!
他の追随を許さない創作2016年

51

私のソースからの作業コード:

HTML WORLD

<select name="select_from" disabled>...</select>

JS WORLD

var from = jQuery('select[name=select_from]');

//add disabled
from.attr('disabled', 'disabled');



//remove it
from.removeAttr("disabled");

2
jQueryから直接Googleからここに来る人々のためのメモとして:As of jQuery 1.6, the .attr() method returns undefined for attributes that have not been set. To retrieve and change DOM properties such as the checked, selected, or disabled state of form elements, use the .prop() method
Erenor Paz

16

jQueryを使用している場合、disabled属性を設定するにはいくつかの方法があります。

var $element = $(...);
    $element.prop('disabled', true);
    $element.attr('disabled', true); 

    // The following do not require jQuery
    $element.get(0).disabled = true;
    $element.get(0).setAttribute('disabled', true);
    $element[0].disabled = true;
    $element[0].setAttribute('disabled', true);

どう$element.eq(0)[0].disabled = true;ですか?:-P
qwertynl 2013

1
ええ、それは私にとって上級者向けです、私はパフォーマンスを向上させるためにそれほど遠くに行きません。
iConnor 2013

+1。少し冗長ですが。NodeList /要素の配列を処理する場合は、そのようなインデックスで要素を選択するのはばかげています。反復するか、単に必要な要素のみを選択する方が理にかなっています。

13
$(element).prop('disabled', true); //true|disabled will work on all
$(element).attr('disabled', true); 
element.disabled = true;
element.setAttribute('disabled', true);

上記のすべてが完全に有効なソリューションです。ニーズに最も適したものを選択してください。


1
jQueryを必要としないソリューションを提供していただきありがとうございます。
エリアスザマリア2018年

12

DOM要素を取得し、disabledプロパティを直接設定できます。

$(".shownextrow").click(function() { 
  $(this).closest("tr").next().show()
          .find('.longboxsmall').hide()[0].disabled = 'disabled';
});

または、複数ある場合は、を使用each()してそれらすべてを設定できます。

$(".shownextrow").click(function() { 
  $(this).closest("tr").next().show()
          .find('.longboxsmall').each(function() {
               this.style.display = 'none';
               this.disabled = 'disabled';
          });
});

5

jQueryのattr()メソッドを使用するだけ

$(this).closest("tr").next().show().find('.longboxsmall').attr('disabled', 'disabled');

3
を使用して無効な状態を削除します.removeAttr('disabled');
ruhong

2

質問はJSでこれを行う方法を尋ねていたので、私はバニラJSの実装を提供しています。

var element = document.querySelector(".your-element-class-goes-here");
// it's a good idea to check whether the element exists
if (element != null && element != undefined) {
  element.disabled = "disabled";
}

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.