#javascript #jquery
#javascript #jquery
Вопрос:
Как я могу сохранить значение заголовка для строки? Это значения title=%s:
<a class="false" title=1106 href="/useradminpage?main_id=%samp;display=false"><span class="small">(hide)</span></a>
<a class="false" title=1153 href="/useradminpage?main_id=%samp;display=false"><span class="small">(hide)</span></a>
<a class="false" title=1175 href="/useradminpage?main_id=%samp;display=false"><span class="small">(hide)</span></a>
…
Я пробовал бесчисленные варианты, но ни один из них не работает. Это то, что у меня есть сейчас:
<script>
$(document).ready(function() {
console.log("ready");
$("a.false").click(function(e) {
$(this).closest("tr.hide").hide("slow");
var main_id = a.title;
var display = "false";
e.preventDefault();
});
$("a.false").click(function() {
$.ajax({
url: "/useradminpage?main_id=%samp;display=false",
data: {main_id: "main_id", display: "display"},
success: function(data) {
display_false()
alert("4 - returned");
}
});
});
});
</script>
Это третий вопрос по этой теме. Я ценю любую помощь. Спасибо.
Комментарии:
1. Значения ваших
title
атрибутов действительно должны быть в кавычках2. @ Clive: Как упоминали другие
var main_id = this.title;
, работает, придавая значение названию.3. Я имел в виду, что в вашем HTML-коде 🙂
title=1106
должно бытьtitle="1106"
. Это просто хорошая практика4. Хорошо, спасибо, исправлено. По какой-то причине я думал, что мне не нужно ставить кавычки, когда я использую форматирование строки с.
%s
Ответ №1:
вместо
var main_id = a.title;
попробуйте
var main_id = $(this).attr('title');
потому что, если я не ошибаюсь, «a» не определено
Ответ №2:
Я думаю, что то, что вы пытаетесь сделать, это передать значение title
атрибута в вашем запросе AJAX. Если это так, проще всего сделать все это в одном обработчике событий (есть ли причина, по которой вы привязываете 2 разных обработчика к одному и тому же событию?):
$("a.false").click(function(e) {
$(this).closest("tr.hide").hide("slow");
var main_id = this.title;
var display = "false";
e.preventDefault();
$.ajax({
url: "/useradminpage",
data: {main_id: main_id, display: display},
success: function(data) {
display_false();
alert("4 - returned");
}
});
});
В настоящее время ваша проблема заключается в том, что main_id
и display
не входят в область второго прослушивателя событий, поэтому будут неопределенными (и их не следует заключать в кавычки, иначе вы просто передаете строки). Поскольку вы передаете data
объект в ajax
функцию, вам также не нужно добавлять строку запроса в URL.
Кроме того, когда вы присваиваете значение main_id
, вы используете a.title
. В этом случае a
значение не определено, и вам нужно будет использовать this
, который будет ссылкой на выбранный элемент.
Комментарии:
1. @ James Allardice: Спасибо! Это выглядит красиво и отлично работает, и спасибо за подробное объяснение. Можете ли вы прояснить еще одну вещь? Я ошибочно подумал, что мне нужно вызвать функцию, которая обновляет базу
success:
данных, поэтому у меняdisplay_false();
там есть. Но эта строка выдает aUncaught ReferenceError: display_false is not defined
, и когда я комментирую эту строку, база данных все еще обновляется. Итак, что мне нужно поместить внутрьsuccess:
? В документации говорится «Функция, которая будет вызвана, если запрос будет выполнен успешно», что меня смущает. Еще раз спасибо.2. Я думаю, что вы попытались вызвать функцию PHP из JavaScript внутри
success
обратного вызова. Это никогда не сработает, потому что PHP выполняется на сервере, а JS — на стороне клиента. Обратныйsuccess
вызов — это просто функция, которая запускается, когда вызов AJAX завершает выполнение. Вы могли бы, например, использовать его для отображения пользователю сообщения об успешном завершении.
Ответ №3:
Я подозреваю, что, возможно, я что-то упускаю, но я подозреваю, что ваша проблема заключается в использовании a.title
вместо this.title
:
$("a.false").click(function(e) {
$(this).closest("tr.hide").hide("slow");
var main_id = this.title; // or you could use the jQuery object approach: $(this).attr('title') instead
var display = "false";
e.preventDefault();
});
Проблема в вашем первоначальном подходе заключается в том, что a
он будет анализироваться как переменная, которой не было присвоено значение и не было объявлено, чтобы она возвращала undefined
or null
(в лучшем случае). В рамках each()
метода вы перебираете отдельные узлы; поэтому для доступа к свойствам / атрибутам этого узла используйте this
.
Комментарии:
1. @ Дэвид Томас: Спасибо. Да, я получал неопределенную ошибку в браузере.
Ответ №4:
Чтобы получить доступ к любому атрибуту элемента DOM через jQuery, вы можете использовать функцию .attr() . В вашем конкретном случае вы бы сделали.
var main_id = $(this).attr('title');