2010-11-23 3 views
2

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

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(''); 
     } 
    } 
    } 
} 
+0

Я подозреваю, что проблема заключается в попытке добавить элемент с идентификатором несколько раз = «сообщение» (так как идентификаторы должны быть уникальными). Замена его классом = «сообщение» может решить вашу проблему. – 2010-11-23 10:38:19

+0

@conqenator - `.val()` все равно получит значение * first *. – 2010-11-23 10:41:07

ответ

5

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

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

в противном случае (в настоящее время) вы добавляете новый #message элемент каждый раз, и то, что вы «Просмотр - это классическая проблема с дублирующимся идентификатором, это tting значение первого (первое, что вы добавили ..., которое никогда не осталось).


В целом есть несколько вопросов, например IE < 9 не имея 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(); 
     } 
    } 
    } 
} 
Смежные вопросы