Проблема реализации keypressed () и onCLick () в IE - PullRequest
0 голосов
/ 16 октября 2010

У меня есть следующее поле ввода и кнопка.

<div id="sender" onKeyUp="keypressed(event);">
     Your message: <input type="text" name="msg" size="70" id="msg" />
     <button onClick="doWork();">Send</button>
</div>

Функция нажатия кнопки (события) фактически определяет, является ли нажатая клавиша «Enter», и вызывает функцию doWork ().

function keypressed(e){
     if(e.keyCode=='13'){
         doWork();
     }
}

Похоже, что этот код отлично работает в Chrome и Firefox. Но в IE функция, кажется, вызывается дважды.

Может ли кто-нибудь помочь мне настроить код, чтобы он правильно работал и в IE.

Спасибо

отредактировано:

Целые коды Ajax

<!--
      var httpObject = null;
      var link = "";
      var timerID = 0;
      var nickName = "Unname"; //"<?php echo $nickname; ?>";

      // Get the HTTP Object
      function getHTTPObject(){
         if (window.ActiveXObject) return new ActiveXObject("Microsoft.XMLHTTP");
         else if (window.XMLHttpRequest) return new XMLHttpRequest();
         else {
            alert("Your browser does not support AJAX.");
            return null;
         }
      }   

      // Change the value of the outputText field
      function setOutput(){
         if(httpObject.readyState == 4){
            var response = httpObject.responseText;
            var objDiv = document.getElementById("result");
            objDiv.innerHTML += response;
            objDiv.scrollTop = objDiv.scrollHeight;
            var inpObj = document.getElementById("msg");
            inpObj.value = "";
            inpObj.focus();
         }
      }

      // Change the value of the outputText field
      function setAll(){
         if(httpObject.readyState == 4){
            var response = httpObject.responseText;
            var objDiv = document.getElementById("result");
            objDiv.innerHTML = response;
            objDiv.scrollTop = objDiv.scrollHeight;
         }
      }

      // Implement business logic    
      function doWork(){    
         httpObject = getHTTPObject();
         if (httpObject != null) {
            link = "message.php?nick="+nickName+"&msg="+encodeURIComponent(document.getElementById('msg').value);
            httpObject.open("GET", link , true);
            httpObject.onreadystatechange = setOutput;
            httpObject.send(null);
         }
      }

      // Implement business logic    
      function doReload(){    
         httpObject = getHTTPObject();
         var randomnumber=Math.floor(Math.random()*10000);
         if (httpObject != null) {
            link = "message.php?all=1&rnd="+randomnumber;
            httpObject.open("GET", link , true);
            httpObject.onreadystatechange = setAll;
            httpObject.send(null);
         }
      }

      function UpdateTimer() {
         doReload();   
         timerID = setTimeout("UpdateTimer()", 5000);
      }


      function keypressed(e){
         if(e.keyCode=='13'){
            doWork();
         }
      }
    //-->

1 Ответ

0 голосов
/ 16 октября 2010

Если кто-то сталкивается с подобной проблемой, это может быть полезно. Я решил проблему, обнаружив браузер IE с помощью PHP-скрипта и отбросив функцию onKeyUp () при рендеринге HTML для IE.

PHP-скрипт IE Detection

//Detect IE function
    function detectIE() {
        if (isset($_SERVER['HTTP_USER_AGENT']) && (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== false))
        return true;
        else
        return false;
    }

И вот как я изменил обработку событий.

<div id="sender" <?php if (detectIE()) { /*do nothing */ } else { echo "onKeyUp=\"keypressed(event);\""; } ?> >

 Your message: <input type="text" name="msg" size="70" id="msg" />
 <button onClick="doWork();">Send</button>
 </div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...