Смайлы в поле ввода

Discussion in 'PHP' started by Rednoise, 8 Jun 2009.

  1. Rednoise

    Rednoise New Member

    Joined:
    28 Mar 2007
    Messages:
    29
    Likes Received:
    4
    Reputations:
    0
    вот токо догнать не могу как содержимое ифрейма достать блин
     
  2. Rednoise

    Rednoise New Member

    Joined:
    28 Mar 2007
    Messages:
    29
    Likes Received:
    4
    Reputations:
    0
    Оо доперло

    iframe.contentWindow.document.getElementsByTagName("body")[0].innerHTML

    содержимое поля iframe
     
  3. FireFenix

    FireFenix Elder - Старейшина

    Joined:
    3 Jun 2009
    Messages:
    390
    Likes Received:
    115
    Reputations:
    23
    iframe.document.body.innerHTML лучше
     
  4. Rednoise

    Rednoise New Member

    Joined:
    28 Mar 2007
    Messages:
    29
    Likes Received:
    4
    Reputations:
    0
    щя попробую
     
  5. Rednoise

    Rednoise New Member

    Joined:
    28 Mar 2007
    Messages:
    29
    Likes Received:
    4
    Reputations:
    0
    не канает, так все содержимое между <body> </body> выбирается
     
  6. Rednoise

    Rednoise New Member

    Joined:
    28 Mar 2007
    Messages:
    29
    Likes Received:
    4
    Reputations:
    0
    итак к чему я пришел Ггг (прошу строго не судить)
    на странице составляем форму

    HTML:
    <form action="" method="post">
    <-- поле куда будут заноситься данные -->
    <input type="hidden" class="edit_able" name="msg" value="&nbsp;" /><br />
    <input type="submit" value="Добавить" />
    <-- поле для смайлов -->
    <div class="smiles"></div>
    теперь сам js

    PHP:
    $(document).ready(function()
    {
        
        if($(
    '.edit_able').length)
        {
            var 
    input = $('.edit_able');
            
    // создаем iframe
            
    var iframe document.createElement("iframe"); 
            
    // даем ему оформление
            
    iframe.className 'edit_able';
            
    // вставляем его на страницу
            
    input.after(iframe); 
            var 
    doc "<body class='frameBody'>"+input.val()+"</body>"
            
    iframe.contentWindow.document.open();
            
    iframe.contentWindow.document.write(doc);
            
    iframe.contentWindow.document.close();
            
    // включаем редактирование
            
    iframe.contentWindow.document.designMode "On";
            
            
    // добавляем на страницу смайлы
            
    var smiles = [')','(','8','atlet','ban','be','blin','bomba'];
            var 
    smiles_box='';
            for(
    i=0;i<8;i++) smiles_box += '<img src="img/smiles/'+smiles[i]+'.gif" class="smile" alt=""> ';
            $(
    '.smiles').html(smiles_box);
            
    // и теперь при клике на смайл вставляем его в iframe
            
    $('.smile').click(function()
            {
                
    iframe.contentWindow.document.execCommand('InsertImage'false, $(this).attr('src'));
            })

            
    // теперь 2 раза в секунду заносим содержимое iframe в наше скрытое поле
            //смайлы попадают туда ввиде кода
            
    setInterval(function()
            {
                $(
    '.edit_able').val(iframe.contentWindow.document.getElementsByTagName("body")[0].innerHTML);    
            },
    500);
        }
        
    });
    ну вот вобщем то до чего я докопалсо гг, опера и мозилла воспринимают все адекватно а ослик ИЕ событие клика на картинку не воспринимает...
     
    #26 Rednoise, 10 Jun 2009
    Last edited: 10 Jun 2009
  7. FireFenix

    FireFenix Elder - Старейшина

    Joined:
    3 Jun 2009
    Messages:
    390
    Likes Received:
    115
    Reputations:
    23
    Зачем тут использовать Таймер? Добавляй сразу при изменении контента во фрейме
     
  8. Rednoise

    Rednoise New Member

    Joined:
    28 Mar 2007
    Messages:
    29
    Likes Received:
    4
    Reputations:
    0
    ну я просто не стал заморачиваться с обработкой нажатий клавиш и т.д. + я незнаю как определить копипаст
     
  9. FireFenix

    FireFenix Elder - Старейшина

    Joined:
    3 Jun 2009
    Messages:
    390
    Likes Received:
    115
    Reputations:
    23
    Просто убери интервал

    PHP:
    ... Код ...

    // и теперь при клике на смайл вставляем его в iframe 
            
    $('.smile').click(function() 
            { 
                
    iframe.contentWindow.document.execCommand('InsertI  mage'false, $(this).attr('src')); 
            }) 

            
    //смайлы попадают туда ввиде кода 
            
    $('.edit_able').val(iframe.contentWindow.document.  getElementsByTagName("body")[0].innerHTML);     
    Сразу будет обновляется при занесении картинки
     
  10. Rednoise

    Rednoise New Member

    Joined:
    28 Mar 2007
    Messages:
    29
    Likes Received:
    4
    Reputations:
    0
    FireFenix, угу счас, ну во первых чтоб уж при клике обновлялось то надо внести эту строку кода в саму функцию клика, а во вторых - как же текст который также будет вводиться? не проблема - отслеживать keydown keypress keyup, остается копипаст - как его отследить?
     
  11. FireFenix

    FireFenix Elder - Старейшина

    Joined:
    3 Jun 2009
    Messages:
    390
    Likes Received:
    115
    Reputations:
    23
    HTML:
    <script language="Javascript">
    
    function update()
    {
      $('.edit_able').val(iframe.contentWindow.document.    getElementsByTagName("body")[0].innerHTML);
    }
    
    </script>
    
    <textarea id="text" name="text" size="20" rows="10" onChange="javascript:update();">я текстo</textarea>
     
  12. Rednoise

    Rednoise New Member

    Joined:
    28 Mar 2007
    Messages:
    29
    Likes Received:
    4
    Reputations:
    0
    отличная идея, над терь это к iframe прицепить как то
     
  13. Rednoise

    Rednoise New Member

    Joined:
    28 Mar 2007
    Messages:
    29
    Likes Received:
    4
    Reputations:
    0
    такс еще вопрос - как в iframe при редактировании текста уменьшить межстрочный интервал?
     
    #33 Rednoise, 11 Jun 2009
    Last edited: 11 Jun 2009
  14. FireFenix

    FireFenix Elder - Старейшина

    Joined:
    3 Jun 2009
    Messages:
    390
    Likes Received:
    115
    Reputations:
    23
    как вариант заменять все теги/символы, или перекодировать в хтмл (& = &amp; > = &gt; и т.д.), или то и то :)
    Для кодирования у пхп есть функция htmlspecialchars()
     
    #34 FireFenix, 11 Jun 2009
    Last edited: 11 Jun 2009
  15. Rednoise

    Rednoise New Member

    Joined:
    28 Mar 2007
    Messages:
    29
    Likes Received:
    4
    Reputations:
    0
    да я не в том смысле - при вводе текста нажимаешь перенос строки и курсор делает прыжок через одну т.е. так

    текст

    продолжение

    а надо так

    текст
    продолжение


    я про визуальное восприятие говорю
     
  16. Rednoise

    Rednoise New Member

    Joined:
    28 Mar 2007
    Messages:
    29
    Likes Received:
    4
    Reputations:
    0
    и еше - при истечении лимита вводимых символов - как запретить дальнейший ввод?? с текстареа это не проблема сделать, а вот с ифреймом?
     
  17. FireFenix

    FireFenix Elder - Старейшина

    Joined:
    3 Jun 2009
    Messages:
    390
    Likes Received:
    115
    Reputations:
    23
    Останавливай событие при нажатии, если длина больше заданного
     
  18. Rednoise

    Rednoise New Member

    Joined:
    28 Mar 2007
    Messages:
    29
    Likes Received:
    4
    Reputations:
    0
    пример можешь привести? конкретно для ифрейма
     
  19. FireFenix

    FireFenix Elder - Старейшина

    Joined:
    3 Jun 2009
    Messages:
    390
    Likes Received:
    115
    Reputations:
    23
    PHP:
    <script language="javascript">

    function 
    check()
    {
      var 
    event = (window.event window.event null);
      var 
    element document.getElementById('text');
      
      if (
    element.value.length 10)
      {
        
    event.cancelBubble true;
        
        if (
    event.cancelable)
        {
          
    event.preventDefault();
          
    event.stopPropagation();
        }
       
        
    alert('Превышено количество символов');
      }
    }

    </script>

    <textarea id="text" name="text" size="200" rows="10" onKeyPress="javascript:check();"></textarea>