Contenteditable İçinde Enter Tuşuna Basılınca <div> Tagini Atmasını Engellemek
Contenteditable Div İçerisinde Enter Tuşu Davranışı
Contenteditable div içerisinde ENTER new-line atma işlemini <div> elemanı atarak yapmaktadır.Bunun nedeni Contenteditable içerisinde div elemanları display:block; olarak ayarlı olması ve yeni satır atıldığı görüntüsünü vermesidir.
Ancak bu sizin yazmış olduğunuz metinlerin şişmesine neden olmaktadır.
Bunu gidermenin bazı alternatif yollarını bu yazımda anlatacağım.
1-Php tarafında bu div lerden kurtulmak pek tabi mümkün.
$a=preg_replace ("/</*div (.*?) >/","",$a);
2-Kavascirpt ile client tarafında yapmak:
document.execCommand ("insertHTML",false,"<br><br>"); //iki tane br :bir enter iki kere satır atar çok iyi değil. <br>. br nokta da çalışır ama noktalar gereksiz
3- Yine javascirpt ile client tarafında yapmak:
Ancak bu defa görünmeyen bir karakterden yararlanacağız sonra php tarafında o karakteri yok edeceğiz.
‌ ifadesi sıfır uzunlukta görünmeyen bir karakterdir. Görünmeyen olduğu için php tarafında bu eklediğimiz görünmeyen karakteri silerken yine görünmeyen halini kullanmamız şart. Yoksa işin içinden çıkamazsınız.
Client tarafında görünemeyen karakteri ekliyorum ve new line başarılı bir şekilde çalışır.
$ ('div[contenteditable]') .keydown (function (e) {
if (e.keyCode === 13) {
document.execCommand ("insertHTML",false,"<br>‌");
return false;
}
});
Daha sonra php tarafında ‌ kodları yok edilecek. Ancak veritabanına da görünmez bir karakter olarak gireceğinden dolayı UTF-8 halini yani görünmeyen halindeki karakteri yok etmeniz gerekli. ‌ bunu yok etmeye çalışırsanız yok edemezsiniz. Çünkü veritabanına ‌ böyle girmedi bilakis görünmeyen bir ucube olarak girdi.
Notepad++ da ansi hali şu şekilde:
$a=preg_replace ("/‌/","",$a); bu ifadeyi direk kullanmayın.
Ansi modunda notepad++ a yapışıtırın daha sonra Encodin>Utf8 bomsuza çevirin. Sonra o oluşan kodu php tarafında kullanın.
Eğer < ve > işratlerini de daha yazarken < ve > ifadelerine dönüştürülmesini istiyorsanız daha kapsamlı bir kod bloğu:
$ ('div[contenteditable]') .keydown (function (e) {
if (e.keyCode === 13) {
document.execCommand ("insertHTML",false,"<br>‌");
return false;
}
else if (e.keyCode === 226) {
if (!e.shiftKey)
document.execCommand ('insertHTML', false, '<');
else if (e.shiftKey)
document.execCommand ('insertHTML', false, '>');
return false;
}
});