web-dev-qa-db-ja.com

.attr( "disabled"、 "disabled")の問題

この関数は、無効化された属性を入力フィールドから切り替えます:

$('.someElement').click(function(){     
  if (someCondition) {
     console.log($target.prev('input')) // gives out the right object
     $target.toggleClass('open').prev('input').attr('disabled', 'disabled');
  }else{
     $target.toggleClass('open').prev('input').removeAttr('disabled'); //this works
  }
})

removeAttrは正常に動作しますが、無効化されたものを再度追加する必要がある場合、何も実行されません。 console.logがトリガーされ(正しい入力フィールドが返されます)、ifステートメントが機能することを確信しています。しかし、firefoxでfirebugを使用してDOMを検査すると、disabled属性は表示されません。

誰かが私を助けることができますか?

PS:機能やifステートメント自体に焦点を合わせないでください。

編集:その入力type = "hidden"は、hiddenフィールドでdisabledが機能しない可能性がありますか?

22
meo

あなたの貢献に感謝します!私は問題を見つけました:

ITS A FIREBUG BUG !!!

私のコードは動作します。 PHP Devに隠された入力タイプを入力タイプテキストに変更するように依頼しました。無効な機能は動作します。しかし、firebugコンソールはこのステータスを更新しません!

このfirebugのバグは、ここで自分でテストできます http://jsbin.com/uneti3/3# 。サンプルページのaSeptikへのThx。

更新:2012年6月:FF11のFirebugにはまだこのバグがあります。

41
meo

[〜#〜] updated [〜#〜]

デモ: http://jsbin.com/uneti3/

あなたのコードが間違っている、それはこのようなものでなければなりません:

 $(bla).click(function() { 
        var disable =  $target.toggleClass('open').hasClass('open');
       $target.prev().prop("disabled", disable);
  });

間違った方法でtoggleClass関数を使用しています

8
Luca Filosofi

この更新されたコードを試してください:

$(bla).click(function(){        
  if (something) {
     console.log($target.prev("input")) // gives out the right object
     $target.toggleClass("open").prev("input").attr("disabled", "true");
  }else{
     $target.toggleClass("open").prev("input").removeAttr("disabled"); //this works
  }
})
7
Pranay Rana

ボタンの無効状態を切り替えるときに、同様の問題に直面していました! removeProp('disabled')を実行した後、ボタンは再び「無効」になることを拒否しました!興味深い解決策が見つかりました。ボタンを無効にするにはprop("disabled",true)を使用し、再度有効にするにはprop("disabled",false)を使用してください。これで、必要な回数だけボタンの「無効」状態を切り替えることができました。やってみて。

2
jin