Относится ли this к элементу, вызвавшему эту функцию? - PullRequest
2 голосов
/ 29 апреля 2011

В приведенном ниже фрагменте кода я использую $(this) для ссылки на элемент, из которого вызывается функция. Я знаю, что это не правильно, потому что я распечатал значения, и это дало мне «неопределенный». Как мне обратиться к элементу ввода?

$(function() {
    $( ".datepicker" ).datepicker({
        onSelect: function (date, obj){
                if(confirm('Is this correct?: '+ date )) {
                    $.post('edit.php', {
                        "row": $(this).data('id'),
                        "date":date,
                        "field":$(this).name,
                        "ajax":'true'
                        });
                    }
                }
    });
});

Вот HTML-элемент:

<input 
name="appvAcadVp" 
data-id="someid"  
class="datepicker" size="10" 
type="text"
placeholder="someholder"
>

Ответы [ 2 ]

8 голосов
/ 29 апреля 2011

jQuery устанавливает this сам, как правило, для указания на текущий элемент.

В противном случае в JavaScript ...

Как функция, назначенная для свойства

var a = {
   b: function() {
      // `this` is `a`
   }
}

a.b();

За исключением , где свойство становится присвоенным переменной.Наблюдайте ...

var c = a.b;
c(); // the `this` will point to `window`

как функцию, назначенную переменной

var a = function() {
   // `this` is `window`
}

a();

как конструктор

var C = function() {
   // `this` is `c`
}

var c = new C();

Обратите внимание, что еслиЕсли вы забыли создать экземпляр с new, JavaScript назначит эти свойства глобальному объекту (window в браузере).


В глобальной области видимости

// In global scope `this` is `window`
var d = this;

Как вызывается с call() или apply()

Вы также можете установить this явно с помощьюcall() и apply() методы функций.


Теперь к вашей проблеме ...

Спасибо за объяснение 'этого', но я все еще не понимаю, почемуссылка не работает в моем коде

Мои извинения.

$(this).name не будет работать, поскольку this теперь является объектом jQuery и имеет только несколько свойств (ни один из которых не является name).

Либо используйте $(this).attr('name'), либо удалите перенос this с объектом jQuery и просто получите доступ к this.name.

1 голос
/ 29 апреля 2011

Для этого и используется параметр obj в функции onSelect, поэтому вы должны ссылаться на $(obj).Просто для справки this будет ссылаться на соответствующее поле ввода.

Для справки см .: http://jqueryui.com/demos/datepicker/> События> onSelect

...