2014-12-29 1 views
1

현재 keyup 이벤트의 텍스트 영역 높이를 확장하고 축소하고 있습니다. 그러나 일단 텍스트 영역 knockout 사용자 지정 바인딩을 통해 텍스트 영역에 바인딩 된 일단 높이 높이기를 원합니다. 어떤 해결책? (단지 자바 스크립트의 사용으로) 당신이 할 수있는 사용자 정의 binding-handler을 등록하는 거 필요가있어녹아웃 데이터 바인딩을 사용하여 내용을 기반으로 텍스트 영역 높이를 초기화합니다.

var textElement = $textBox.get(0); 
var textElementOriginalHeight = $textBox.height(); 

while ($textBox.height() > textElementOriginalHeight && textElement.scrollHeight < textElement.offsetHeight) { 
       $textBox.height($textBox.height() - 1); 
      } 

      var h = 0; 

      while (textElement.scrollHeight > textElement.offsetHeight && h !== textElement.offsetHeight) { 
       h = textElement.offsetHeight; 
       $textBox.height($textBox.height() + 1); 
      } 
+0

현재'keyup' 처리보기 참조 암호. – haim770

+0

안녕하세요 770 :) 코드 스 니펫을 추가했습니다 ... 이것은 키 업 메서드에서 실행됩니다 – user2726225

+0

질문을 업데이트하고 상황에 맞는 작은 스 니펫이 포함되어 있는지 확인하십시오 (편집기 도구 모음의 스택 조각). 또한 코드 형식을 지정하는 데주의를 기울이면 도움이되는 더 쉽고 재미있는 코드를 쉽게 읽을 수 있습니다. - 어떤 경우에도 : [맞춤 바인딩] (http://knockoutjs.com/documentation/binding-syntax.html)을 사용해 보셨습니까? – Jeroen

답변

2

현재 키까지 handelling 코드 (모든 JQuery와 라이브러리를 추가하지 않고). 뭔가 같은 :

(function(ko) 
{ 
    function handleAutoFit(textElement, val) 
    { 
     if (!textElement.value) 
      textElement.value = val; 

     var $textBox = $(textElement); 
     var textElementOriginalHeight = $textBox.height(); 

     while ($textBox.height() > textElementOriginalHeight && textElement.scrollHeight < textElement.offsetHeight) { 
      $textBox.height($textBox.height() - 1); 
     } 

     var h = 0; 

     while (textElement.scrollHeight > textElement.offsetHeight && h !== textElement.offsetHeight) { 
      h = textElement.offsetHeight; 
      $textBox.height($textBox.height() + 1); 
     } 
    } 

    ko.bindingHandlers.autoFit = { 
     update: function (element, valueAccessor) { 
      var val = ko.unwrap(valueAccessor()); 
      handleAutoFit(element, val); 
     } 
    }; 
})(ko); 

HTML :

<textarea data-bind="autoFit: someObservable, value: someObservable, valueUpdate: 'afterkeydown'"></textarea> 

또는 당신이 넉 아웃 3.1 이상을 사용하는 경우 :

<textarea data-bind="autoFit: someObservable, textInput: someObservable"></textarea> 

Fiddle

+0

안녕하세요 .770. 이 중대하다 ...하지만 당신은 매우 긴 텍스트 'this.name = ko.observable ('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ')를 추가하는 경우; } '처음에는 확장되지 않았습니다. 처음에 내용의 높이를 취하는 것이 좋을 것입니다. – user2726225

+0

@ user2726225 그럼 뭐야? – haim770

+0

안녕하세요 편집 된 의견은 위와 같습니다 ... 불편을 끼쳐 드려 죄송합니다 :) (첫 번째 의견) – user2726225

관련 문제