Jquery Dialog читает значение textarea только один раз - PullRequest
2 голосов
/ 23 ноября 2010

Я использую диалог с текстовой областью. После нажатия кнопки ОК значение текстовой области отправляется на сервер через ajax.
В первый раз, когда пользователь пишет в текстовое поле, значение читается правильно, но после всех последующих действий отправляемое значение совпадает с первым разом, как если бы пользователь вводил одну и ту же строку снова и снова.

function message(url) { 
  var mydiv; 
  mydiv = $(document.createElement('div')); 
  mydiv.html("enter message: <textarea name='message' id='message'/>"); 
  mydiv.dialog(setProps(url));
  mydiv.dialog('open');
}

function setProps(url) {
  return {
    buttons: {
      "ok": function() {
        $.get('/act?url=' + url + '&message=' + $("#message").val().trim(),
          function(data) { 
            $("#content").load('/react?url=' + url); 
          }
        ); 
        $(this).dialog("close"); 
        $(this).dialog("destroy"); 
        // If I use the following all subseq. actions are empty:
        // $("#message").val(''); 
      }
    } 
  } 
} 

1 Ответ

5 голосов
/ 23 ноября 2010

Когда вы создаете диалоговое окно, оно добавляется в конце <body>, просто потому, что вы уничтожаете диалоговое окно, не означает, что элементы в нем исчезают, они просто возвращаются на свое место или вэтот случай все еще находится в конце <body>, вам также нужно .remove() этих элементов, например:

$(this).dialog("destroy").remove();

В противном случае (в настоящее время) вы добавляете *Элемент 1009 * new #message каждый раз, и то, что вы видите, является классической проблемой дублирования идентификатора, он получает значение первого (первого, который вы добавили ... который никогда не уходил).


В целом, есть еще несколько проблем, например, IE <9 не имеет <code>String.prototype.trim(), поэтому ваше значение взорвется, как если бы в нем было что-то вроде &.Позвольте jQuery кодировать ваши значения, например так:

function message(url) { 
 $("<div>enter message: <textarea name='message' id='message'></textarea></div>")
   .dialog(setProps(url));
}

function setProps(url) {
  return {
    buttons: {
      "ok": function() {
        $.get('/act', { url: url, message: $.trim($("#message").val()) },
          function(data) { 
            $("#content").load('/react?url=' + url); 
          }
        ); 
        $(this).dialog("destroy").remove(); 
      }
    } 
  } 
} 
...