#javascript #jquery #html #ajax #anchor
#javascript #jquery #HTML #ajax #привязка
Вопрос:
Я пытаюсь связаться с activate/deactivate
пользователем, нажав на привязку. Список пользователей генерируется динамически из цикла. Ниже приведен один пример тега привязки.
<a href="http://www.example.com/users/deactivate/44" class="btn btn-success" title="Deactivate">Activated</a>
Они ajax call/database updates/response
работают нормально. Что я хочу, так это соответствующим образом изменить вышеуказанный привязку с обновленной href, class, title and text
информацией об успехе. Для примера теперь он должен измениться на
<a href="http://www.example.com/users/activate/44" class="btn btn-danger" title="Activate">Inactive</a>
У меня есть следующий код jquery:
$(".btn").click(function(event){
event.preventDefault();
var urlSplit=$(this).attr("href").split("/");
var userid = urlSplit[urlSplit.length-1];
var status = urlSplit[urlSplit.length-2];
var $self = $(this);
if(status === 'activate'){
$.post("users/" status "/" userid, {userid: userid, status: status}, function(response){
if(response === 'activated'){
//Edit added code
$self.text("Activated");
$self.attr('href', "http://www.example.com/users/deactivate/" userid);
$self.attr('class', "btn btn-success");
$self.attr('title', "Deactivate");
}
});
}
if(status === 'deactivate'){
$.post("users/" status "/" userid, {userid: userid, status: status}, function(response){
if(response === 'deactivated'){
//Edit added code
$self.text("Inactive");
$self.attr('href', "http://www.example.com/users/activate/" userid);
$self.attr('class', "btn btn-danger");
$self.attr('title', "Activate");
}
});
}
});
Редактировать:
Я добавил код внутри успешного ответа. Хотя кажется, что он работает нормально, он выглядит не совсем правильно для меня или нет? Я должен отвести курсор и снова сфокусироваться, чтобы увидеть изменения в href
и title
.
Комментарии:
1. У вас действительно есть абсолютные URL-адреса, подобные вашему примеру, или это относительные URL-адреса (что более распространено)? Вместо того, чтобы использовать сегменты URL, я предлагаю вам ввести
data-
атрибут типа data-active="true"
, который гораздо проще запрашивать и изменять.2. У меня есть URL-адреса, как в моем примере.
3. Используйте инструменты отладки F12 Chrome и просмотрите DOM, и вы увидите, что он мгновенно меняется. Ваш текущий браузер может не беспокоиться о проверке обновлений (для заголовка и т. Д.), Пока курсор все еще находится над ним. Это не является неожиданным. Chrome работает нормально.
Ответ №1:
Кажется довольно простым, если я не неправильно понял проблему. Используйте замену строки и attr
для изменения атрибутов. Используйте removeClass
и addClass
для изменения классов. $self
уже указывает на конкретную ссылку, которая вызвала событие.
$(".btn").click(function(event){
event.preventDefault();
var urlSplit=$(this).attr("href").split("/");
var userid = urlSplit[urlSplit.length-1];
var status = urlSplit[urlSplit.length-2];
var $self = $(this);
if(status === 'activate'){
$.post("users/" status "/" userid, {userid: userid, status: status}, function(response){
if(response === 'activated'){
$self.text("Activated");
// what to do here
$self.attr('href', $self.attr('href').replace('activate', 'deactivate'));
$self.removeClass('btn-danger').addClass('btn-success');
$self.attr('title', 'Activate');
}
});
}
if(status === 'deactivate'){
$.post("users/" status "/" userid, {userid: userid, status: status}, function(response){
if(response === 'deactivated'){
//what to do here
$self.text("Inactive");
$self.attr('href', $self.attr('href').replace('deactivate', 'activate'));
$self.removeClass('btn-success').addClass('btn-danger');
$self.attr('title', 'Deactivate');
}
});
}
});
Простой макет: http://jsfiddle.net/TrueBlueAussie/9gLta/2 /
Я отключил вызовы Ajax, чтобы протестировать его.
Обновление: Обратите внимание, что код вопроса был изменен после публикации, чтобы включить большую часть этого кода.
Комментарии:
1. Изменения мгновенно применяются к вашей демонстрации. Но мне нужно переориентировать курсор, чтобы увидеть URL-адрес ссылки и изменения заголовка в моей системе. Я использую Chrome.
2. Это проблема браузера, и я ничего не знаю, что вы можете с этим поделать. В конце концов, вы вытаскиваете ковер из-под ссылки, над которой вы находитесь . Последняя версия Chrome они появляются через секунду (и ссылка в строке состояния мгновенно меняется) 🙂
3. Но странно, что демонстрационный код отлично работает в моем Chrome, но в том же коде в моем проекте есть эта проблема. У меня последняя версия Chrome, и даже через несколько секунд я не вижу вышеупомянутых изменений.
4. Но ваш DOM изменяется при просмотре в проводнике F12 DOM? Если это так, то это странно.
5. Конечно, не код. Единственное другое предложение, которое я бы добавил, это использовать делегированное
on
событие для уменьшения накладных расходов ваших обработчиков кликов, но это тривиально.