为什么这给我提供了未定义的; jQuery的

时间:2013-11-14 19:49:29

标签: jquery

我正在使用parent()find()方法访问对应按钮的textarea。

但我每次都未定义。我已经在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");
       }
     })
   }
}

但是它总是给我一个未定义的控制台错误,说不能从undefine属性获取值。

您可以在此处看到错误消息:

enter image description here

这是我创造的小提琴,它起作用。 http://jsfiddle.net/afzaal_ahmad_zeeshan/ZBcby/

2 个答案:

答案 0 :(得分:2)

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

您获得val()的价值。你有一个字符串。您正在尝试获取字符串的value属性。这不起作用。

这将:

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

或者,事实上,甚至更简单:

if (comment) {

答案 1 :(得分:1)

当您按照以下方式调用您的函数时:

onclick="commentThis(@row.PostId)"

...它没有将this的值设置为单击的元素。 this将为window。您可以将其更改为显式设置this

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

您还需要更改功能的以下行:

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

因为如果条件总是为真,因为comment != ""将为真或comment != null为真。您可能打算使用&&代替||

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

...但你可以简化:

if (comment) {

(实际上,假设comment是调用.val()的结果,它永远不会是null,它将是一个字符串或undefined - 如果你使选择器正确,它将不是undefined。)