#jquery #jquery-ui
#jquery #jquery-пользовательский интерфейс
Вопрос:
Я использую Jquery и jQueryUI для:
-
У меня есть
<img>
, который содержит изображение -
На этом изображении есть кнопка редактирования, которая позволяет изменить его положение (перенос переполнения div: скрытый), а затем пользователь может нажать «Отмена» или «Сохранить», чтобы отправить AJAX-вызов с конечной позицией «сохранение относительной обрезки изображения» (думаю, facebook изображение профиля с помощью большого пальца селектор работает)
-
У пользователя также есть список опций из ~ 8 изображений (аналогичный тому, как Twitter меняет фон из образцов), из которых он / она может выбрать. При щелчке изображение в
<img>
теге заменяется на то, на которое нажал пользователь, и позиция сбрасывается на top: 0px, leftpx;
Все это работает отлично.
НО если изображение УЖЕ перетаскивалось — тогда другое изображение после замены перетаскивать нельзя. В inspect element — код обновляется с правильными верхними и левыми координатами и добавляет правильные классы — но изображение не перемещается.
Если код был бы полезен — я могу предоставить это.
ОТРЕДАКТИРУЙТЕ ** Код ниже
id=image_slice_wrapper скрывает переполнение с фиксированными размерами. имеет src при загрузке страницы слева и сверху из базы данных (сохранено)
<div id="image_slice_wrapper">
<img id="draggable" class="slice_img ui-draggable" style="position:relative; left:-1000px; top:-250px" src="images/ducati.jpg"/>
</div>
Отредактируйте скрипт кнопки, чтобы сделать Div перетаскиваемым (удалены дополнительные элементы стиля)
$("#edit_button").click(function() {
$( ".slice_img" ).draggable({ disabled: false, drag: function(){
$(".slice_img").css("cursor","move");
});
Кнопка сохранения для резервной копии div (удален AJAX и стиль)
$("#save_button").click(function() {
$('.slice_img').draggable( "option", "disabled", true );
});
Сценарий замены Img (slice_thumb — это предварительный просмотр изображения для запуска замены)
$(".slice_thumb").click(function() {
var new_image = $(this).find("img").attr("src");
$(".slice_img").attr("src",new_image);
$(".slice_img").attr("style","left:0px; top:0px;");
});
Итак, еще раз: если я перетаскиваю изображение. А затем замените это изображение другим изображением. Новое изображение не поддается перетаскиванию. Однако я все еще вижу, что верхний и левый стили меняются, а к элементу добавляются правильные классы.
Комментарии:
1. Код всегда полезен .. jsfiddle. net еще лучше. Первая мысль, однако, вы привязываетесь к событиям, используя live?
2. @Todd не уверен, что означает «использовать live». Не могли бы вы пояснить?
3. Посмотрите на документы jQuery для «живого» метода ( api.jquery.com/live ). Используется для автоматической повторной привязки событий к динамически генерируемым объектам.
Ответ №1:
Решена моя проблема. Все еще не очевидно, почему это работает.
Я изменил сценарий замены изображения на:
$(".slice_thumb").click(function() {
var src = $(this).find("img").attr("src");
$(".slice_img").attr("style","left:0px; top:0px;");
$("#draggable").after('<img src=" " />').attr("src", src).addClass("slice_img ui-draggable").attr("style","position:relative; left:0px; top:0px").attr("id","draggable");
});
Это фактически заменяет img src (как это делалось раньше), но также создает пустое изображение после <img src="_">
. И по какой-то причине jquery это нравится. Новое изображение можно перетаскивать в коде (я вижу изменение положения) — и его можно заметно перетаскивать в DOM. Круто!