jQuery: $ .trim () пробелы между словами в input.val () - PullRequest
12 голосов
/ 20 декабря 2011

Я видел здесь несколько похожих вопросов, но на самом деле они мне не отвечают ...

Итак, я делаю это: (внутри функции готовности документа)

$("#dest").focusin(function() {
    $("#dest").val($.trim($("#dest").val()));
});

Идея заключается в том, что пользователь фокусируется на input, называемом #dest, обрезая все пробелы на нем (ранее добавленные с помощью focusout для визуального комфорта).

Прямо сейчас ничего не происходит. (

Надеюсь, кто-нибудь может мне здесь немного помочь.

Спасибо!


Это проблема, связанная с компьютером? Я проверил весь код, предоставленный комментаторами, и ни один не работает. Я использую Firefox и Safari под OSX (Snow Leopard) 10.6.8, а также Safari под 10.8.2 (Lion), и я получил те же результаты ... Проблема OSX? - Все в порядке, проверьте мое последнее редактирование!


Окончательное редактирование и решение благодаря Филу Кляйну

Моя проблема заключалась в неправильном использовании функции jQuery trim() ... Согласно документации trim() она выполняет следующие действия:

Функция $ .trim () удаляет все символы новой строки, пробелы (включая неразрывные пробелы) и вкладки в начале и конце предоставленная строка. Если эти пробельные символы появляются в середине строка, они сохранились.

Вчера я не читал последнюю часть, где написано from the beginning and end of the supplied string - Извините всех. (

К счастью, после рисунка выше, @Phil Klein понял мою ошибку и помог мне с решением:

$(function() {
    $("#dest").on("focus", function() {
        var dest = $(this);
        dest.val(dest.val().split(" ").join("")); 
    });
});

Вы можете узнать больше о решении и посмотреть пример здесь .

Спасибо @Phil Klein, а также всем, кто помог мне в этом;)

Ответы [ 6 ]

18 голосов
/ 20 декабря 2011

В приведенном ниже примере удаляются все пробелы из содержимого текстового поля в фокусе.В этом конкретном примере требуется jQuery 1.7+, поскольку он использует новый .on() API:

$(function() {
    $("#dest").on("focus", function() {
        var dest = $(this);
        dest.val(dest.val().split(" ").join("")); 
    });
});

См. Этот пример: http://jsfiddle.net/RnZ5Y/5/

4 голосов
/ 20 декабря 2011

Попробуйте: $.trim($("#dest").val());
поправь меня если я не прав !!

1 голос
/ 12 сентября 2014

попробуй $("#dest").val().trim();, у меня это сработало.

0 голосов
/ 11 марта 2018

Я сделал свою собственную функцию :)

посмотрите здесь, пожалуйста :)

function KillSpaces(phrase) {

            var totalPhrase = "";
            for (i = 0; i < phrase.length; i++)
            {
                if (phrase[i] != " ")
                {
                    totalPhrase += phrase[i];
                }
            }
            return totalPhrase;
        }

Вы можете легко использовать его, когда захотите!

$(document).ready(function(){
var test="for testing purposes only";
alert(killSpaces(test));
});
0 голосов
/ 18 апреля 2014

Эта функция работает нормально для вашего сценария.Поскольку он занимает только один пробел между символами и не допускает более 2 пробелов

$(function() {
 $("#dest").on("focusout", function() {
    var dest = $(this);
    dest.val(jQuery.trim(dest.val()));        
    dest.val(dest.val().replace(/[ ]{2,}/, ' ')); 
 });
});
0 голосов
/ 20 декабря 2011

Если указанный выше код выполняется до того, как страница не будет полностью готова, то весьма вероятно, что jquery не найдет #dest и код для прослушивания события не будет выполнен.

...