Почему это дает мне неопределенное; JQuery

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");
       }
     })
   }
}

Но это всегда дает мне консольную ошибку undefined, говоря, что значение не может быть взято из атрибута undefine.

Вы можете увидеть сообщение об ошибке здесь:

Изображение 174551

вот скрипка, которую я создал и которая работает. http://jsfiddle.net/afzaal_ahmad_zeeshan/ZBcby/

  • 0
    Строка не имеет значения свойства?
  • 0
    Почему вы передаете PostId в функцию, но не используете его в функции?
Показать ещё 13 комментариев
Теги:

2 ответа

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

Вы получили значение с val(). Поэтому у вас есть строка. Вы пытаетесь получить value свойства строки. Это не сработает.

Это будет:

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

Или, по сути, еще проще:

if (comment) {
  • 0
    Я обновил свой код, как вы предложили, но я все еще получаю то же сообщение Uncaught TypeError: Cannot read property 'value' of undefined
  • 0
    @AfzaalAhmadZeeshan Можете ли вы обновить вопрос с вашим текущим кодом, пожалуйста.
Показать ещё 5 комментариев
1

Когда вы вызываете свою функцию следующим образом:

onclick="commentThis(@row.PostId)"

... он не устанавливает значение this элемента, который был нажат. this будет window. Вы можете изменить его, чтобы явно установить значение this:

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

Вам также потребуется изменить следующую строку вашей функции:

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

потому что условие if всегда будет истинным, потому что либо comment != "" будет true, либо comment != null будет true. Вы, вероятно, хотели использовать && вместо || :

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

... но вы можете упростить это:

if (comment) {

(И на практике, учитывая, что comment является результатом вызова .val() он никогда не будет null в любом случае, это будет либо строка или undefined - и если вы получите селектор вправо он не будет undefined.)

  • 0
    Две вещи, одна: код все еще дает мне вывод undefined, но не консольный журнал! :( к сожалению, два: что означает истина? Как это будет всегда?
  • 0
    Хорошо, спасибо! для информации :)
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню