Событие onmousedown останавливает фокус ввода

Я обрабатываю события mousedown и oncontextmenu, чтобы предотвратить выбор текста и изображения, щелкнуть правой кнопкой мыши и перетащить. Код выглядит следующим образом:

<body oncontextmenu="return false;" onmousedown="event.preventDefault ? event.preventDefault() : event.returnValue = false"> 
    <input type="text" name="testInput" id="testInput">
</body>

Я предполагаю, что проблема в том, что он также предотвращает фокусировку на элементах ввода, так как я предотвращаю использование значения по умолчанию и возвращаю false для события onmousedown, поэтому он не позволяет управлению переключаться на фокус ввода, поэтому я не могу ничего вводить внутри него. Я попытался отладить его, следуя коду.

<script type="text/javascript">
    $(function(){
        $( "#testInput" ).on("focus",function(){
           console.log("input focused");
        });
    });
</script>

Когда я удалил атрибут onmousedown из тела, он дал мне желаемое сообщение на cosole.

любая помощь... Заранее спасибо.


person Pramod    schedule 16.09.2014    source источник


Ответы (1)


Вы можете проверить, происходит ли событие mousedown/contextmenu на каком-либо внутреннем элементе, и разрешить действие по умолчанию, если это так, и если нет, предотвратить действие по умолчанию, используя ниже

document.getElementsByTagName("div")[0].addEventListener("mousedown",function(e){
    if(e.target.id=="testInput"){

    } else{
      e.preventDefault();
    }

});

document.getElementsByTagName("div")[0].addEventListener("contextmenu",function(e){
    if(e.target.id=="testInput"){

    } else{
      e.preventDefault();
    }

});

Проверьте скрипку

person Chakravarthy S M    schedule 16.09.2014
comment
но его тело mousedown/contextmenu будет вызываться всякий раз, когда я буду пробовать его на внутренних элементах, и из самого тела оно возвращается, не позволяя управлению обрабатывать внутреннее меню mousedown/contextmenu. - person Pramod; 16.09.2014
comment
вы можете использовать document.getElementsByTagName(body)[0] вместо div - person Chakravarthy S M; 16.09.2014