2010-11-23 2 views
2

텍스트 영역이있는 대화 상자를 사용하고 있습니다. ok 버튼을 클릭하면 텍스트 영역의 값이 ajax를 통해 서버로 전송됩니다.
처음 사용자가 텍스트 영역에 쓸 때 값은 올바르게 읽히지 만 모든 후속 작업에서 사용자가 동일한 문자열을 반복해서 입력 한 것처럼 처음 값이 동일합니다.Jquery 대화 상자에서 텍스트 영역 값을 한 번만 읽음

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

의심스러운 문제는 id가 'message'인 요소를 여러 번 추가하려는 시도입니다 (ID는 고유해야하므로). 이것을 class = 'message'로 바꾸면 문제가 해결 될 수도 있습니다. –

+0

@conqenator -'.val()'은 * first * 요소의 값을 여전히 얻습니다. –

+0

@Nick : hmmm .last(). val()을 사용하면이를 해결할 수 있습니다. 그러나 나는 그것이 최선의 방법이 아닐 것이라고 생각한다. –

답변

5

당신이 대화 당신이 그것에 요소가 사라 의미하지 않는다 대화 상자를 파괴하고해서, 그들은 단지 자신의 위치로 돌아갑니다의 <body>의 끝에 추가됩니다를 만들 , 그렇지 않으면 (현재) 당신이 새로운#message 요소마다를 추가하는

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

, 그리고 무엇을 : 또는 <body>의 끝에 여전히이 경우, 당신은 또한 .remove()에 그 같은 요소가 필요 기존의 중복 된 ID 문제가 발생했습니다. 첫 번째 값 (첫 번째로 추가 한 값은 한번도 남지 않은 값)을 계산합니다.


은 전반적으로 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(); 
     } 
    } 
    } 
} 
+0

힌트를 보내 주셔서 감사합니다! – trajectory

+0

내가 늦은 도착이라해도, 힌트를 주셔서 대단히 감사합니다! 전체 자바 스크립트 코드를 디버그하는 데 소비 한 후 내 퍼즐을 해결했습니다. – sthor69

관련 문제