Почему этот однострочный jQuery не будет делать то, что должен? - PullRequest
2 голосов
/ 14 марта 2011

Я работаю над некоторым кодированием пользовательского интерфейса и написал одну строчку jQuery:

$ ('input [type = text]'). Val ($ (this) .attr ('default-value'));

Намерение дать каждому входному текстовому полю значение по умолчанию, которое указывается в атрибуте.

Есть предложения?ТИА

Ответы [ 5 ]

5 голосов
/ 14 марта 2011
$('input[type=text]').each(function () {
    $(this).val($(this).attr('default-value'));
});

this внутри вашего val() вызова не ссылается на элемент, но это просто контекст функции, в которой вы запускаете этот однострочный.

Кроме того, при определении пользовательских атрибутов вы могли бы рассмотреть возможность инвестирования в HTML5 ранее и использовать соглашение «data- *»: в HTML5 допустимо определять пользовательские атрибуты, если они имеют префикс «data-». Поэтому я бы использовал что-то вроде «data-default» вместо «default-value».

3 голосов
/ 14 марта 2011

Попробуйте:

$('input[type=text]').each(function() {
   $(this).val($(this).attr('default-value'));
});

Проблема с вашим заключается в том, что $(this) не было определено в контексте, в котором вы его использовали.

2 голосов
/ 14 марта 2011

Это не работает, потому что контекст this не тот, который вы ожидаете.Попробуйте это:

$('input[type=text]').each(function(){
    var $this = $(this);
    $this.val($this.attr('default-value'));
});
1 голос
/ 14 марта 2011

Я думаю, что вы хотите:

$('input[type=text]').val(function(i,e) { return $(e).attr('default-value'); } );

0 голосов
/ 14 марта 2011

Поскольку вы неправильно ссылаетесь на элемент ...

Вы немедленно присваиваете значение ввода для текущей области действия $(this) вместо получаемого элемента.

$(":text").each(function() { $(this).val($(this).attr('default-value')); });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...