$(document).ready(function() {
$('.raj').click(function() {
if (!$(this).hasClass('already')) {
$('.infos').html('');
$('.infos').hide("fast");
$.ajax({
type: "POST",
dataType: "json",
url: "ggg/hhh/rrr.php",
success: function (msg) {
$('.infos').html(msg['ats']);
arr = msg['valid'];
}
});
$('.infos').show("slow");
if (arr == 1) {
$(this).css("cursor", "default");
$(this).addClass('already');
$(this).animate({
opacity: 0.1
}, 1000);
}
}
})
})
Когда я нажимаю элемент с классом raj
(это изображение), ничего не происходит. Только после того, как он будет нажат второй раз, мое событие, похоже, срабатывает. Почему это происходит?Почему мое событие не запускается в первый раз?
редактировать: эта часть задрачивал до:
if(arr == 1)
{
$(this).css("cursor", "default");
$(this).addClass('already');
$(this).animate({
opacity: 0.1
}, 1000);
}
Но msg['valid']
действительно всегда один, так что я не понимаю.
Попробуйте это так. Однако обработка результата должна быть выполнена после ajax callback. Вы уже проверили результат до того, как он был фактически завершен. – Vinzenz
@Vinzenz: Почему здесь не работает '$ (this)', и мы должны использовать 'thisObj'? –
+1 Еще одна вещь, которую следует иметь в виду: '$ .ajax' имеет свойство' context: ', которое вы можете установить, чтобы дать' this' в обратных вызовах значение, которое вы хотите. Таким образом, вы можете добавить 'context: this,', чтобы иметь эту ссылку в элементе в обратном вызове. – user113716