2013-08-09 55 views
11

Tôi đang buộc phải tạo hiệu ứng đơn giản bằng cách sử dụng keyup() trong jQuery. Tôi chỉ muốn rằng khi người dùng nhập vào số textarea thì văn bản mà loại người dùng sẽ sao chép sang một div khác có tên là .content. Khi tôi bấm , hãy nhập vào văn bản dòng mới được tạo nhưng trong div của tôi văn bản được hiển thị trong cùng một dòng. Mã của tôi là dưới đây hoặc bạn có thể xem demo ở đây: http://jsfiddle.net/Pqygp/Sao chép văn bản của vùng văn bản vào div có ngắt dòng

HTML

<textarea name="mas" rows="15" class="content"></textarea> 
<p>&nbsp;</p> 
<div class="mas" >Texts Comes here</div> 

SCRIPT

$('.content:not(.focus)').keyup(function(){     
    var value = $(this).val(); 
    var contentAttr = $(this).attr('name'); 

    $('.'+contentAttr+'').html(value); 
}) 
+0

Bạn có muốn sử dụng javascript cho điều này thay thế của jQuery? –

+0

Có bất kỳ câu trả lời nào giúp bạn không? Nếu có, vui lòng kiểm tra để hoàn thành câu hỏi này. – smerny

Trả lời

12

Bạn cần phải chuyển đổi dòng mới thành <br> thẻ cho đầu ra phù hợp trong DIV.

$('.'+contentAttr+'').html(value.replace(/\r?\n/g,'<br/>')); 

Thể hiện trong mã của bạn dưới đây:

$('.content:not(.focus)').keyup(function(){     


    var value = $(this).val(); 
    var contentAttr = $(this).attr('name'); 

    $('.'+contentAttr+'').html(value.replace(/\r?\n/g,'<br/>')); //convert newlines into <br> tags 

}); 

JSFiddle

+0

có cách nào an toàn để thực hiện việc này không? Nó khá vô nghĩa như vậy. Trong khi nó trả lời câu hỏi, tất cả những gì tôi phải làm là gõ và nó sẽ chạy. Vì vậy, đối với đầu vào của người dùng, có một chút nguy hiểm nếu nội dung này được hiển thị cho nhiều người dùng – user2330270

+0

@ user2330270 Yea, chỉ cần sử dụng '.text()' thay vì '.html()' – SmokeyPHP

5

Sử dụng dòng này: Fiddle

$('.'+contentAttr+'').html(value.replace(/\n/g,"<br>")); 

Vấn đề là các dòng mới không tạo ra dấu ngắt dòng trong html, nhưng <br> sẽ.

1

Hãy thử như

var value = $(this).(); 
var contentAttr = $(this).attr('name'); 

$('.'+contentAttr+'').html(value.replace(/\r?\n/g,"<br>")); 

Đây là DEMO

+0

Xem chỉnh sửa của tôi ... Stuck with jsfiddle. .. – Gautam3164

27

Thêm một white-space: pre-wrap quy tắc đối với CSS của div.

.mas { 
    white-space: pre-wrap; 
} 

Demo: http://jsfiddle.net/Pqygp/13/

+1

Xin lưu ý chỉ có IE 8 và hỗ trợ cao hơn tài sản này. Theo [tham chiếu MDN] (https://developer.mozilla.org/en-US/docs/Web/CSS/white-space), bạn có thể sử dụng thuộc tính '{ từ bọc: ngắt lời;/* IE 5.5-7 */ không gian trắng: -moz-pre-wrap;/* Firefox 1.0-2.0 */ không gian trắng: được bọc trước;/* trình duyệt hiện tại */ } 'để nó hoạt động với IE 6 – pedromanoel

+0

Tôi thích điều này nhiều hơn, bởi vì nó có một vài dòng và bạn có thể sử dụng ´.text() ´ để hiển thị mà không cần tham chiếu html ´
´. – Cyber

0

Nếu bạn sử dụng Phản ứng:

render() { 
    const nbOfTextareaRows = this.state.textareaValue.split('\n').length; 

    return (
    <textarea 
     value={this.state.textareaValue} 
     onChange={e => this.setState({ textareaValue: e.target.value })} 
     rows={nbOfTextareaRows} 
    /> 
); 
} 
Các vấn đề liên quan