IE9 javascript: дождаться окончания выбора - PullRequest
1 голос
/ 20 марта 2012

У меня есть этот скрипт, который захватывает выделенный текст, я хотел бы сделать что-то, только когда выбор текста заканчивается, а не в то время, когда выделение находится в процессе, браузер только IE9 текст также может быть выделен двойным щелчком по слову, в этом случае функция также должна сделать что-то один раз, когда я использую onMouseUp, это дважды

<head>
  <script type="text/javascript">
    function selectedText(){
      var doc = document.selection;
      if(doc && doc.createRange().text.length != 0){
        log.innerHTML = doc.createRange().text;
      }
    }
  </script>
</head>
<body onselect="selectedText();">
  <span id=sp>this is the text from where you can select one or more words</span>
  <div id=log style="background-color=yellow;"></div>
</body>

Ответы [ 2 ]

0 голосов
/ 20 марта 2012

IE поддерживает событие selectionchange для Document объектов, которое более полезно, чем событие select, но все равно не будет работать точно так, как вы просите, потому что процесс двойного щелчка может изменить выбор более одного раза и следовательно, запустите более одного selectionchange события.

Вот пример использования этого события, которое будет работать в IE как минимум еще в IE 6:

document.onselectionchange = function() {
    var sel = document.selection;
    if (sel.type == "Text") {
        var range = sel.createRange();
        document.getElementById("log") = range.text;
    }
};

Если вас не интересуют более ранние версии IE, вы можете использовать поддержку IE 9 для стандартных API-интерфейсов диапазона и выбора DOM, а затем этот код также будет работать в WebKit:

document.onselectionchange = function() {
    var sel = window.getSelection();
    if (sel.rangeCount > 0) {
        var range = sel.getRangeAt(0);
        document.getElementById("log") = range.toString();
    }
};
0 голосов
/ 20 марта 2012

Неважно, разобрался, это для будущего использования

<head>
    <script type="text/javascript">
        count = 0;
        function selectedText(){
          var doc = document.selection;
          if(doc && doc.createRange().text.length != 0){
            count++;
            log.innerHTML = "count: "+count+" "+doc.createRange().text;
          }
        }

        function AddEventHandler () {
          var sp = document.getElementById ("sp");
          if (sp.addEventListener) {   // all browsers except IE before version 9
            sp.addEventListener ("click", selectedText, false);
          } 
          else {
            if (sp.attachEvent) {    // IE before version 9
              sp.attachEvent ('onmouseup', selectedText);
            }
          }
        };
    </script>
</head>
<body onload=AddEventHandler()>
    <span id=sp>this is the text from where you can select one or more words</span>
    <div id=log style="background-color=yellow;"></div>
</body>

или этой более короткой версии

<head>
  <script type="text/javascript">
    count = 0;
    document.onselectionchange = function() { 
      count++;
      var sel = window.getSelection(); 
      if (sel.rangeCount > 0) { 
        var range = sel.getRangeAt(0); 
        document.getElementById("log") = count+":"+range.toString(); 
      } 
    }; 
  </script>
</head>
<body>
  <span id=sp>this is the text from where you can select one or more words</span>
  <div id=log style="background-color=yellow;"></div>

</body>
...