0

私はjQueryに苦労しています。ボタンがクリックされたときに、ボタンと同じ親(リストアイテム)を共有するテキスト領域が読み取り専用かどうかをチェックするスクリプトを作成したいと思います。HTMLは次のとおりです。

...
<li>
  <h1>Title</h1>
  <button type="button" onclick="javascript:confirmDelete();">Delete</button>
  <button type="button" onclick="javascript:toggle();">Toggle</button>
  <textarea class="readOnly" readonly="true">Some text</textarea>
</li>
...

そしてスクリプト:

<script language="JavaScript">
  <!--
  ...    
  function toggle()
  {
    var textArea = $(this).parent("li").children("textarea");
    var isReadOnly = textArea.attr("readonly");
    if (isReadOnly == "true") {
      alert('It\'s read-only.');
    } else {
      alert('It\'s not read-only.');
    }
  }
  //-->
</script>

合格できないようですvar textArea = ...

アップデート1:

OK、問題を分析できるように、選択を分解しました。

...
var btn = $(this);
console.log(btn); //returns value, but not sure what exactly
var li = btn.parent();
console.log(li); //returns value, but not sure what exactly
var textArea = li.children('textarea');
console.log(textArea.prop('tagName')); //returns unidentified

だから、エラーがあります。デバッグから得られるすべての出力がオブジェクトである場合(そしてそれが何を表すのかさえわかりません。それが要素なのか配列なのか)、実際には何が間違っているのか理解できないようです。 ..)またはunidentified。jQueryは正確には直感的ではありません。

4

3 に答える 3

0

プロパティは大文字と小文字を区別します。代わりに試す

var isReadOnly = textArea.attr("readOnly");
于 2013-02-04T23:26:37.067 に答える
0

それがあなたが必要とする可能性が高い唯一の場合:

...find("textarea")[0];

いいえ

...children("textarea");

または単に$(this).siblings("textarea")[0];

または直接選択

var mylist = $(this).siblings("textarea.readOnly");

if (mylist.length > 0)//true if it is
于 2013-02-04T23:29:22.347 に答える
0

ここにいくつかのエラーがあります。

まず、属性「読み取り専用」がアクティブな場合、「真」の値ではなく「読み取り専用」の値があることがわかります。

一方、onclick で関数を呼び出す場合 (100% 確実ではありません)、$(this) を使用することはできません。することをお勧めします(トリガーボタンにIDを付けたり、それを識別するために何かをしたりした後):

$(function() {

  $("button#my-button").bind("click", function() {
    if ($(this).siblings("textarea").attr("readonly") == "readonly") {
      alert("It's readonly");
    } else {
      alert ("It's not");
    }
  });

});
于 2013-02-05T00:07:21.643 に答える