Подтвердить что ты не робот

Установить положение курсора в текстовом поле ввода

После большого поиска я нашел следующие темы:

определить позицию курсора в поле ввода формы

jQuery Установить положение курсора в текстовой области

К сожалению, ни в одном из сообщений не указывается полный код вставки формы или реальный пример. Теперь я просто не знаю, как включить код nemisj (по первой ссылке) или код Mark (по второй ссылке) в мою форму:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
  <script src="http://code.jquery.com/jquery-latest.js"></script>
  <script type="text/javascript" src="http://dev.jquery.com/view/trunk/plugins/validate/jquery.validate.js"></script>

  <script>
  $(document).ready(function(){
$("#site").focus(function(){
    if( this.value == this.defaultValue ) {
        $(this).val("http://");
    }
});
  });
  </script>

</head>
<body>
<form action="#" method="post">
<input id="name" type="text" name="name" value="Name" /><br />
<input id="site" type="text" name="mail" value="Website" /><br />
<input type="submit" value="Send"> 
</form>
</body>
</html>

Интересно, может ли кто-нибудь помочь мне с этим, потому что я сильно застрял!

Большое спасибо заранее!

Здесь отредактированный код, но он все еще не работает:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
  <script src="http://code.jquery.com/jquery-latest.js"></script>
  <script type="text/javascript" src="http://dev.jquery.com/view/trunk/plugins/validate/jquery.validate.js"></script>

  <script>
function setCursor(node,pos){

    var node = (typeof node == "string" || node instanceof String) ? document.getElementById(node) : node;

    if(!node){
        return false;
    }else if(node.createTextRange){
        var textRange = node.createTextRange();
        textRange.collapse(true);
        textRange.moveEnd(pos);
        textRange.moveStart(pos);
        textRange.select();
        return true;
    }else if(node.setSelectionRange){
        node.setSelectionRange(pos,pos);
        return true;
    }

    return false;
}
  $(document).ready(function(){
$("#site").focus(function(){
    if( this.value == this.defaultValue ) {
    $(this).val("http://");

    var node = $(this).get(0);
    setCursor(node,node.value.length);
}
});
  });
  </script>

</head>
<body>
<form action="#" method="post">
<input id="name" type="text" name="name" value="Name" /><br />
<input id="site" type="text" name="mail" value="Website" /><br />
<input type="submit" value="Send"> 
</form>
</body>
</html>  
4b9b3361

Ответ 1

Внутри вашего тега <script></script> находится ваш JavaScript (хотя мы предпочитаем помещать его в отдельный файл, так что на самой HTML-странице не работает JavaScript).

В этом случае вы вызываете $(document).ready(), который передает function() { ... }. Внутри этой функции находится весь код, который будет выполняться при загрузке документа.

Внутри этой функции есть вызов $('#site').focus(), который сам предоставляет функцию - на этот раз тот, который будет вызываться всякий раз, когда элемент #site получает фокус. И, предположительно, там, где вы хотите изменить позицию курсора.

Итак, беря функцию setCursor из Установите курсор с длиной 14 на фокус текстового поля, вы можете поместить это в любом месте вашего <script></script>, а затем внутри этого самого внутреннего функции, которую вы можете написать:

if( this.value == this.defaultValue ) {
    $(this).val("http://");

    var node = $(this).get(0);
    setCursor(node,node.value.length);
}

Ответ 2

Я думаю, что нашел ошибку в вашем методе setCursor. Методы moveStart и moveEnd ожидают два аргумента, первый из которых является единицей, которую он должен использовать. Кроме того, конечная позиция, по-видимому, относится к исходной позиции. Поэтому я думаю вместо

    textRange.moveEnd(pos);
    textRange.moveStart(pos);

вы хотите

    textRange.moveStart('character', pos);
    textRange.moveEnd('character', 0);

Смотрите: http://msdn.microsoft.com/en-us/library/ie/ms536623(v=vs.85).aspx