1

テキストエリア コントロールのキーアップ イベントへのバインドに問題があります。私は以下を試しています

var shortDescInput = $('nobr:contains("Short Description")').closest('tr').find($('textarea[title="Short Description"]'));

    // this doesn't work
    shortDescInput.bind('keyup', function () {
        countShortDescChars();
    });

    // Nor this
    shortDescInput.keyup(function () {
        countShortDescChars();
    });

ここで本当に明白な何かが欠けていますか?これは、イベントをラジオボタンにバインドするなど、他のコントロールでも機能します。私はチェックしましたが、正しいテキストエリアを反抗的に選択しています

var shortDescInput = $('nobr:contains("Short Description")').closest('tr').find($('textarea[title="Short Description"]'));

私はキーアップイベントを取得していないようです....

4

4 に答える 4

1

find($('textarea[title="Short Description"]'))非常に非効率です。あなたの目的のために、find引数としてセレクターを取る必要があります。

jQuery オブジェクトを に渡すとfind、jQuery は最初に DOM を上からクエリし、そのセレクターに一致するすべての要素を見つけます。次に、指定された親に一致する結果が見つかるまで、これらすべてfindの結果をループします。

代わりに、次を使用する必要があります。

find('textarea[title="Short Description"]')

また、.onの代わりに使用し.bindます。.bind非効率であるため、将来のリリースでは廃止される予定です。

shortDescInput.on("keyup", countShortDescChars);

そして改訂されたコード:

$(function () {
    var shortDescInput = $('nobr:contains("Short Description")').closest('tr').find('textarea[title="Short Description"]');

    shortDescInput.on("keyup", countShortDescChars);
});
于 2012-08-14T13:08:48.723 に答える
0

だから私はあなたのフィドルと一緒に遊んだ... あなたのセレクターに何か問題があります。

  • まず、js 部分からスクリプト タグを削除します。
  • 次に、html の script タグを削除すると、フィドルが壊れてしまいます。
  • jQuery 1.8.0 に切り替えたのは、MooTools が必要なものではないためです。
  • shortDescInput = $('textarea');巨大なセレクターの後に追加すると、イベントがトリガーされます!
  • 関数に再度追加しshortDescInput = $('textarea');て、カウンターを機能させます。

それでは、セレクターが機能しない理由を考えてみましょう:-)

編集:

それを見つけた!

はあなたの .closest() を .parent().next() に置き換えました。

var shortDescInput = $('nobr:contains("Short Description")').parent().next().find('textarea[title="Short Description"]');
于 2012-08-14T14:14:52.747 に答える
0

セレクターが機能していることを確認するには、 console.log() または昔ながらの alert() で.length を使用します。

var shortDescInput = $('nobr:contains("Short Description")').closest('tr').find('textarea[title="Short Description"]');

alert(shortDescInput.length);

何も返さないものを特定するために段階的に進むこともできます:

alert($('nobr:contains("Short Description")').length);
alert($('nobr:contains("Short Description")').closest('tr').length);
alert($('nobr:contains("Short Description")').closest('tr').find('textarea[title="Short Description"]').length);

2 回目の試行。.bind() の代わりに .on() を使用:

shortDescInput.on('keyup',function(){countShortDescChars();});
于 2012-08-14T13:11:41.670 に答える
0

問題は、少なくともフィドルでは、<tr>が a になかった<table>ため、ブラウザーによって DOM から削除されたことです。をラップする<tr><table>、フィドルが機能します。
デモ: http://jsfiddle.net/kNkXE/9/

于 2012-08-14T14:22:12.933 に答える