jQuery $ (this) ссылается на HTML-документ вместо элемента

#jquery #this

#jquery #это

Вопрос:

Я пытаюсь прочитать относительное значение элемента.

 $('.input-default').ready(function()
{
    $('.input-default').inputDefault($(this).attr('rel'));
});
  

Но проблема в том, что $ (this) каким-то образом ссылается на весь HTML-документ. Почему? И как мне это исправить?

Ответ №1:

Вы не запускаете его в .ready() событии конкретного элемента. Я думаю, что контекстом в то время могло быть window. Просто обратитесь к входным данным напрямую.

 $(document).ready(function() {
   var rel =  $('.input-default:first').attr('rel'); //added :first to make sure you only get the rel of the first
});
  

Редактировать

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

Просматривая его документацию, вы можете сделать следующее, чтобы получить то, что вы хотите

 $(document).ready(function(){
   $('.input.input-default').inputDefault({defaultAttr: 'rel'});
});
  

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

Для перебора коллекции элементов DOM вы можете использовать .each() функцию.

 $(document).ready(function(){
   $('.input-default').each(function(){
        $(this).inputDefault($(this).attr('rel'));
   });
});
  

Комментарии:

1. Это должно быть общеприменимо, поэтому я могу просто присвоить элементам формы класс input-default и значение rel, которое должно быть значением по умолчанию в поле ввода.

2. Ну, класс может быть применен к нескольким элементам, поэтому вызов a .val() или получение значения не будет иметь смысла, потому что у вас много экземпляров. Если вы удалите :first фильтр, вы получите коллекцию

3. = 1, ваш ответ намного лучше и лаконичнее, чем мой (был) 🙂

4. Я не совсем понимаю, о чем ты говоришь, Джон. Зачем мне вызывать val()? И зачем мне нужна коллекция? Если поля ввода пусты, в них должно быть что-то вроде «Введите здесь свое имя пользователя», для этого и предназначена функция.

5. @Thomas ты работаешь над классом, поэтому ты получишь коллекцию. В любом случае, вы можете упомянуть, что используете inputdefault плагин в своем вопросе. Я обновил свой ответ и перечислил ваши варианты