16

条件によっては、HTMLフォーム要素のセクションを無効にしたいのですが。これはそれを行うための理想的な方法のようです:

<fieldset disabled>
    <input value="one" />
    <input value="two" />
</fieldset>

現在、これら2つの入力は無効になっています。ただし、これはIE8では完全に中断されているようです。入力は無効になっているように見えますが、それでも入力できます。

フィドル(JsFiddleが実際にIE8で機能するわけではありません)

すべてのフォーム要素にdisabledを追加せずに、この問題のクロスブラウザーソリューションはありますか(スクリプトが複雑になります)。<fieldset>jQueryでを選択し、.each()すべてのフォーム要素を調べて無効にするなど、トリッキーなことを行うこともできますが、実際にdisabledはKnockoutバインディングを使用して属性を設定しているため、そのようなコードを追加する場所は実際にはありません。私の最後の手段は、すべての子も無効にするカスタムノックアウトバインディングを使用することですが、ため息をつきます。

4

5 に答える 5

11

Ok, I've come up with a Knockout.js specific implementation that hopefully will help some other people in the same boat. This solution could probably be adapted for other solutions and platforms with a little effort.

First, I created a Knockout binding:

ko.bindingHandlers.allowEdit = {
   init: function(element, valueAccessor)
   {
      if(!valueAccessor())
      {
         element.disabled = true;
         element.readOnly = true;

         if(element.tagName === 'FIELDSET')
         {
            $(':input', element).attr('disabled', 'disabled');
         }
      }
   }
};

Note, you'd have to implement the update method too if you wanted to allow changes to this binding. I didn't have this requirement.

You could then use the binding as such:

<fieldset data-bind="allowEdit: someExpression">
   <input value="One" />
   <input value="Two" />
</fieldset>
于 2013-03-26T20:55:58.003 に答える
4

In short: No. The reason behind this is because the lack of support in IE8 and the disabled attribute on the fieldset element.

Source

In IE7 and IE8, the attribute only disables form elements in the < legend >.

I'm afraid you should look for a custom solution like the answers from other users / your own custom binding.

于 2013-03-26T20:49:08.350 に答える
2

jQueryを使用したソリューション:

var disabledFiedset=$('fieldset[disabled]');
$('input',disabledFiedset).attr('disabled','disabled');
于 2013-03-26T20:38:04.520 に答える
1
于 2013-03-26T20:39:32.720 に答える
0

Give the id to your fieldset tag(or u can also use tag name directly in jquery code) & use following code to make all the fields disable in that fieldset using jquery.

$("#fieldset id" or "fieldset").children().attr("disabled", "disabled");

于 2013-04-04T07:04:20.653 に答える