Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: jquery trim в опере не убирает переносы
 
 автор: vadimka   (23.05.2012 в 17:10)   письмо автору
 
 

Здравствуйте!
Имеется считалка, которая в опере глючит: если в текстареа ввести скопированный текст с переводом каретки в опере появляются лишние знаки...

  Ответить  
 
 автор: confirm   (23.05.2012 в 17:52)   письмо автору
 
   для: vadimka   (23.05.2012 в 17:10)
 

// Used for trimming whitespace
trimLeft = /^\s+/
trimRight = /\s+$/
// Use native String.trim function wherever possible
trim: trim ?
    function( text ) {
        return text == null ?
            "" :
            trim.call( text );
    } :
// Otherwise use our own trimming functionality
    function( text ) {
        return text == null ?
            "" :
            text.toString().replace( trimLeft, "" ).replace( trimRight, "" );
    }

Как видите, перевод каретки jquery не удаляет, и это не зависит от браузера.

  Ответить  
 
 автор: vadimka   (23.05.2012 в 19:43)   письмо автору
 
   для: confirm   (23.05.2012 в 17:52)
 

я не правильно объяснил - если скопировать текст, в котором есть перевод каретки именно в опере неправильно работает счетчик...

  Ответить  
 
 автор: confirm   (23.05.2012 в 20:11)   письмо автору
 
   для: vadimka   (23.05.2012 в 19:43)
 

Ну а причем тут trim? Виной переводы строки? Удаляйте их.

  Ответить  
 
 автор: ЯСА   (23.05.2012 в 20:31)   письмо автору
 
   для: vadimka   (23.05.2012 в 19:43)
 

в каком смысле - "неправильно"?

перевод строк - это тоже символ (а иногда и два) - \n или \n\r
если не хотите их подсчитывать - сделайте изменение в функции-счётчике, пусть она эти символы не распознаёт.

  Ответить  
 
 автор: vadimka   (23.05.2012 в 20:45)   письмо автору
 
   для: ЯСА   (23.05.2012 в 20:31)
 

ничего не понимаю,смотрите:

textarea.value.length;

так считает нормально, а вот так:

$(textarea).val().length;

какой-то глюк!!!!

  Ответить  
 
 автор: confirm   (23.05.2012 в 20:49)   письмо автору
 
   для: vadimka   (23.05.2012 в 20:45)
 

не правильно ссылаетесь на объект в jquery.

  Ответить  
 
 автор: vadimka   (23.05.2012 в 20:59)   письмо автору
 
   для: confirm   (23.05.2012 в 20:49)
 

да, мне уже старшие товарищи указали, что $(textarea) - это объект в дебагге показывает, что-то вроде такого:

textarea#idMassage

а как к ниму обратиться?

  Ответить  
 
 автор: confirm   (23.05.2012 в 21:05)   письмо автору
 
   для: vadimka   (23.05.2012 в 20:59)
 

По id или по тегу, но заключая его в кавычки, если у вас на странице такой элемент один.

  Ответить  
 
 автор: vadimka   (24.05.2012 в 12:45)   письмо автору
 
   для: confirm   (23.05.2012 в 21:05)
 

можно пример кода?

  Ответить  
 
 автор: vadimka   (24.05.2012 в 13:36)   письмо автору
 
   для: vadimka   (24.05.2012 в 12:45)
 

сейчас такая хрень работает:
$(textarea).attr("value").length;

  Ответить  
 
 автор: vadimka   (24.05.2012 в 15:08)   письмо автору
 
   для: vadimka   (24.05.2012 в 13:36)
 

-

  Ответить  
 
 автор: confirm   (24.05.2012 в 15:28)   письмо автору
 
   для: vadimka   (24.05.2012 в 13:36)
 

Ничего удивительного, так как вы получаете значение атрибута value и "спрашиваете" его размер. Удивительно другое, что вы, после того как вам сказали, продолжаете неверно ссылаться на объект.
jQuery, это не РНР, который встретив вашу ошибку в коде, типа $var[name], "постарается" понять, что вы ошиблись, ибо такой константы среди предопределенных или объявленных вами не найдет, и "предположит", что правильно будет так - $var['name']. Но не дай бог разработчики РНР предопределят такую константу, и тогда РНР ваш баг исправлять уже не будет.
jQuery, это не какой-то особенный язык, это простая js-библиотека написанная на javascript, в котором бы можно было обратиться к объекту как:

var tag = document.getElementsByTagName('textarea');

и именно так, а не getElementsByTagName(textarea), и так:

$("textarea")

Javascript и jQuery ваши ошибки исправлять не будет.

  Ответить  
 
 автор: vadimka   (24.05.2012 в 16:46)   письмо автору
 
   для: confirm   (24.05.2012 в 15:28)
 

охо-хо я не писал код, а исправляю:)
function checkTextLength(textarea){
    var maxLength = $(textarea).attr("maxlength");

             //так считает в опере нормально:
    var value = textarea.value;
а в оригинале вот так: не учитывает, при подсчете перенос каретки:
                   var value = $(textarea).val(); 
}

  Ответить  
 
 автор: Sfinks   (24.05.2012 в 17:00)   письмо автору
 
   для: vadimka   (24.05.2012 в 16:46)
 

Вы действительно не понимаете разницы между
textarea
и
"textarea"
????

  Ответить  
 
 автор: vadimka   (24.05.2012 в 17:08)   письмо автору
 
   для: Sfinks   (24.05.2012 в 17:00)
 

Вы помойму меня не правильно поняли: textarea в данном случае аргумент функции....

  Ответить  
 
 автор: Sfinks   (24.05.2012 в 17:16)   письмо автору
 
   для: vadimka   (24.05.2012 в 17:08)
 

А, сори, не доглядел ) Ток не понятно зачем такое имя.... Ну да ладно.

  Ответить  
 
 автор: confirm   (24.05.2012 в 17:09)   письмо автору
3.8 Кб
 
   для: vadimka   (24.05.2012 в 16:46)
 

<script type="text/javascript">
$(function(){
   $("textarea").keyup(function() {
      $("span").text($(this).val().length); 
   });  
});
</script>    

<textarea rows="10"></textarea>
<span></span>

Как видите размер учитывает и перевод каретки.

PS. Касаемо аргумента - такое только от отсутствия фантазии, "персонализированные" функции. )

  Ответить  
 
 автор: vadimka   (24.05.2012 в 18:50)   письмо автору
 
   для: confirm   (24.05.2012 в 17:09)
 

у меня так:
var value = $(textarea).attr("value");
считает нормально, но при нажатии энтера в браузерах считает один знак, а в опере - 2!
Если написать:
var value = $(textarea).val();
энтеры вообще не считает, считает как-то неправильно (это касается только оперы)
не хочу перевод каретки игнорировать... пускай если энтер один знак, но в опере - 2 знака:)

  Ответить  
 
 автор: confirm   (24.05.2012 в 19:05)   письмо автору
18.6 Кб
 
   для: vadimka   (24.05.2012 в 18:50)
 

Где здесь разный подход к размеру? В данном случае размер перевода каретки определяется системой, а не браузером.

  Ответить  
 
 автор: vadimka   (24.05.2012 в 19:41)   письмо автору
 
   для: confirm   (24.05.2012 в 19:05)
 

ы знаете - я не понял, не могли бы Вы объяснить мою ошибку

  Ответить  
 
 автор: confirm   (24.05.2012 в 19:47)   письмо автору
 
   для: vadimka   (24.05.2012 в 19:41)
 

Для начала выполните тот код что я написал. Считает у вас тоже правильно во всех браузерах?

  Ответить  
 
 автор: confirm   (25.05.2012 в 05:32)   письмо автору
15.7 Кб
 
   для: vadimka   (24.05.2012 в 19:41)
 

И где резюме результата?
Собственно без него знаю, что и ваши "личные" браузеры будут выполнять метод .val() jQuery и при этом считать размер одинаково. Да и другого быть не может.
А вот теперь не используя jQuery:
<textarea rows="10" 
onkeyup="document.getElementById('s').innerHTML=this.value.length"></textarea>
<span id="s"></span>

Как видите Ослик и Опера показывают иной результат, нежели Лиса и отпрыск Гугла. Если же задать вопрос кто прав, то в среде Windows объективны два первых, так как в этой среде переход на новую строку, это значения (hex) 0D - возврат каретки, плюс 0A - перевод строки, итого 12 значений (в примере).

  Ответить  
 
 автор: vadimka   (25.05.2012 в 12:02)   письмо автору
 
   для: confirm   (25.05.2012 в 05:32)
 

Понимаете я использую коды написанные другими, и у меня ограниченные возможности для редактирования:)
Пример кода вызова функции:
onpaste="${cnt}" oninput="${cnt}" onkeypress="${cnt}" onkeyup="${cnt}" onchange="${cnt}"

просто в опере энтер дает два знака, в ОСТАЛЬНЫХ - один, я не могу при этом протестировать Ваш код, так как связан рамками структуры:)

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования