0

メソッドを使用しparent()find()、対応するボタンのテキストエリアにアクセスしています。

しかし、私は毎回未定義になります。私はjsfiddleで試しましたが、そのフィドルは機能します。ここにコードがあります

<div>
  <textarea id="textarea"></textarea>
  <button onclick="commentThis('10')">Post Comment</button>
  <button onclick="neverMind('10')">Never Mind</button>
</div>

jQueryコードは

function commentThis(postId) {
   var comment = $(this).parent().find("#textarea").val();
   if (comment != "" || comment != null) {
     $.ajax({
       url: "/ajax_requests/post_comment",
       data: "postId=" + postId + "&type=comment&comment=" + 
       comment + "&page=default",
       success: function (result) {
          $(".comments").append(result);
          $("#textarea").val("");
          $("#textarea").css("height", "20px");
       }
     })
   }
}

しかし、未定義の属性から値を取得できないという、未定義のコンソールエラーが常に表示されます。

ここでエラーメッセージを確認できます:

ここに画像の説明を入力

ここに私が作成したフィドルがあります。http://jsfiddle.net/afzaal_ahmad_zeeshan/ZBcby/

4

2 に答える 2

1

次のように関数を呼び出すと:

onclick="commentThis(@row.PostId)"

this...クリックされた要素に値を設定しません。thisとなりますwindow。の値を明示的に設定するように変更できますthis

onclick="commentThis.call(this,@row.PostId)"

関数の次の行も変更する必要があります。

if (comment != "" || comment != null) {

どちらかが真になるか真になるため、if条件は常に真になるためです。おそらく代わりに使用するつもりでした:comment != ""comment != null&&||

if (comment != "" && comment != null) {

...しかし、これを次のように単純化できます。

if (comment) {

(そして実際にcommentは、それが呼び出しの結果であることを考えると、それはとにかく.val()決してnull文字列undefinedになることはなく、セレクターを正しく取得した場合はそうではありませんundefined。)

于 2013-11-14T20:04:30.140 に答える