#javascript #jquery #checkbox #jquery-autocomplete
#javascript #jquery ( jquery ) #флажок #jquery-автозаполнение
Вопрос:
Я пока не очень хорошо разбираюсь в javascript, поэтому мне нужна помощь. Я начал использовать плагин jQuery Autosuggest, который позволяет мне добавлять теги (что-то вроде тегов stackoverflow). Что я хочу сделать, так это сгенерировать флажок для каждого выбранного тега. По этой причине я модифицировал плагин так, чтобы он заключал каждое имя тега в a <span class="tag tag_name">tag_name</span>
, чтобы было проще получить тег, что я и делаю следующим образом: $(".tag").attr("class").replace("tag ", "");
. Во всяком случае, я написал скрипт, который генерирует флажок, но проблема в том, что он генерирует флажок только для первого тега и продолжает генерировать его каждые 2 секунды. Кроме того, я беспокоюсь, что сценарий может быть немного перегружен подготовкой? Вот сценарий:
$(document).ready(function(){
var done = {};
$("input[type=text]").autoSuggest("get.php", {searchObjProps:"name", selectedItemProp:"name", asHtmlID: "1"});
var timer = setInterval(function(){
if(!done[city]){
var city = $(".mestoJe").attr("class").replace("mestoJe", "");
done[city] = true;
}
var nr = 0;
$.each(done, function(i, j){
if(j != 2){
var tmp = $('<input type="checkbox" value="' nr '" name="city[]">' i '<br />');
$("#checkboxes").append(tmp);
j = 2;
nr ;
}
});
},2000);
});
Любая помощь будет оценена по достоинству!
Комментарии:
1. Почему вы навсегда добавляете флажки на таймере с интервалом в 2 секунды? Почему бы просто не добавить все, что вы хотите, и готово. Почему бы не остановить таймер, когда вы закончите добавлять все флажки?
2. Как бы я это сделал? Я действительно глуп с этим: S
3. Остановка таймера
clearInterval(timer)
завершена .
Ответ №1:
В этой строке вашего скрипта:
var city = $(".mestoJe").attr("class").replace("mestoJe", "");
вы вызываете .replace()
, чтобы удалить имя класса, но не присваиваете его обратно чему-либо, поэтому на самом деле ничего не меняется. .replace()
возвращает замененную строку — она не изменяет переданную.
Чтобы фактически изменить имя класса и, таким образом, перейти в следующий город при следующем срабатывании таймера, вам нужно будет использовать что-то вроде этого:
var firstCity = $(".mestoJe").get(0);
var city = firstCity.className = firstCity.className.replace("mestoJe", "");
Если вы не измените имя класса, то эта строка кода будет генерировать точно такой же результат и точно такое же название города каждый раз:
var city = $(".mestoJe").attr("class").replace("mestoJe", "");
Кроме того, вы запускаете 2-секундный внутренний таймер и никогда не останавливаете его, чтобы он продолжался вечно.
Вы также ссылаетесь:
if(!done[city]){
прежде чем вы когда-либо определяли city
.
Комментарии:
1. На самом деле, класс выглядит так:
<span class="mestoJe city">city</span>
, поэтому я получаю от него именно то, что хочу. И это не было проблемой в первую очередь.2. Но вы вызываете это несколько раз при каждом таймере и каждый раз получаете один и тот же результат, потому что вы никогда ничего не изменяете:
var city = $(".mestoJe").attr("class").replace("mestoJe", "");
3. Святые угодники! Сначала я не понял, что вы говорили, мой плохой. Я думал, что смогу сохранить название города, просто заменив его. На самом деле он генерирует все флажки, но не отображает только весь массив.