2010-07-23 33 views
12

ile etkileşimde bulunurken içerik seçiminde içerik seçimini koru contentEditable bir yayında bağlantılar oluşturmak için jQuery iletişim kuralım var. Sorun, diyaloğu açmak için bir düğmenin tıklatılmasının seçimin kaybolmasına neden olması, diyaloğun içindeki metin girişinin de seçimin kaybolmasına neden olmasıdır.jQuery UI İletişim Kutusu ve metin girişi

Düğmeyi -moz-user-select ile düzeltebilirim: none; -webkit-user-select: hiç kimse Chrome'da çalışmıyor.

Girdiyi bir iframe'e sarmakla düzeltebilirim, ancak bu karışıklık ve başka herhangi bir yere tıklatıldığında, örneğin, iletişim kutusunun sürüklenmesi gibi seçimi de öldürür.

Çözümü How to preserve text selection when opening a jQuery dialog numaralı sayfada gördüm, ancak bu, yalnızca gerçek girdiler olmak üzere, bir içerik ögesi öğesinde birçok tarayıcıda çalışmaz.

Sorunumun hoş bir çözümü var mı?

cevap

25

Seçimi, iletişim kutusu açıldığında ve kapatıldığında aşağıdaki gibi basit işlevleri kullanarak kaydedebilir ve geri yükleyebilirsiniz. Iletişim diyaloğu açma ve kapama içine kanca için mekanizma bilmek jQuery iletişim kuramları ile yeterince tanıdık değilim. pratikte bu işlevi nasıl kullanırım

function saveSelection() { 
    if (window.getSelection) { 
     sel = window.getSelection(); 
     if (sel.getRangeAt && sel.rangeCount) { 
      return sel.getRangeAt(0); 
     } 
    } else if (document.selection && document.selection.createRange) { 
     return document.selection.createRange(); 
    } 
    return null; 
} 

function restoreSelection(range) { 
    if (range) { 
     if (window.getSelection) { 
      sel = window.getSelection(); 
      sel.removeAllRanges(); 
      sel.addRange(range); 
     } else if (document.selection && range.select) { 
      range.select(); 
     } 
    } 
} 
+0

: birincisi, saveSelection, size daha sonra restoreSelection biletlerinde değişkende saklamak gereken bir Range veya TextRange nesneyi döndürür. Bir div öğesinde,

test test
Hussein

+5

Teşekkür ederiz. Sen menzil ustasın! –

+0

selectionChange olayını kullandım. Buraya bakın http://stackoverflow.com/questions/21730134 Dart'ı kullandım ama bu fikri almalısın. –

İlgili konular