Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   получение src картинки при клике на кнопку (https://javascript.ru/forum/misc/33990-poluchenie-src-kartinki-pri-klike-na-knopku.html)

andreychaki 17.12.2012 09:34

получение src картинки при клике на кнопку
 
Здравствуйте!
имеется каталог товаров.
в каждой позции имеется картинка товара и кнопка заказать

как сделать так что бы при клике на кнопку заказать в переменную записался src картинки

godofjavascript 17.12.2012 10:31


tsigel 17.12.2012 10:51

с помощью jQuery это будет так:

$('.order').click(function () {
   var a = $('img.SomeClassImg').attr('src');
})

andreychaki 17.12.2012 10:58

с записью проблем нет. проблема в том что товаров много. и как определять какой src нам нужно записывать.
например такая структура:
<div class="CatalogList">
  <div>
    <img src="img1.jpg">
    <div class="button"></div>
  </div>
  <div>
    <img src="img2.jpg">
    <div class="button"></div>
  </div>
  <div>
    <img src="img3.jpg">
    <div class="button"></div>
  </div>
</div>

необходимо что бы при клике на <div class="button"> в переменную писался src картинки которая лежит с ним в блоке

pivas.net 17.12.2012 11:19

$('.CatalogList .button').click(function () {
     var src = this.parent('div').find('img').attr('src');
    // в src значение атрибута src
});

pivas.net 17.12.2012 11:32

Без jQuery нужно?

andreychaki 17.12.2012 11:48

спасибо, можно и с ним. все равно библиотека подключена для "аккордеона" если структура немного будет отличаться. к примеру больше вложеностей. можно будет указать parent('класс_общего_блока') и будет так же работать?

pivas.net 17.12.2012 11:56

parents ! указываю на "s" в конце имени метода. Тогда будет.

godofjavascript 17.12.2012 11:58

pivas.net, рукожоп, если много элементов то событие вешается на родителя.

$('div.CatalogList').on('click', '> div .button', function () {
    var src = $(this).parent('div').find('img').attr('src');
});

tsigel 17.12.2012 12:03

Если больше одного родителя, то лучше использовать .closest() вместо .parent()

godofjavascript 17.12.2012 12:07

tsigel, верно подметил, я скопипастил не думая. ну у него в примере вроде и парент прокатит. я не даром вангу позвал, может она нам подсказала бы его разметку...

pivas.net 17.12.2012 12:33

godofjavascript, правы.
Про много элементов не заметил, выцепил лишь разметку из коммента, буду внимательней читать.

godofjavascript 17.12.2012 12:51

pivas.net, да) сам по началу жопоруком был) делал "лишь бы работало" а потом, как прокачал скилл, уже начал всякие оптимизации продумывать и прочее еще до того как заработает, потому что уже знал как сделать чтобы просто работало и этого было мало)

andreychaki 17.12.2012 13:06

разметка может быть любой. имеется кнопка, картинка и много всего на этой же странице. поэтому ее изначально не было. та разметка лишь для примера

pivas.net 17.12.2012 13:26

godofjavascript,
кстати, вы давно руки-то проверяли.
В том конкретном примере что же тогда не дооптимизировали?
$('div.CatalogList').on('click', '> div .button', function () {
	var src = this.parentNode.childNodes[1].getAttribute('src');
});

так что - менее оптимально или так же?

godofjavascript 17.12.2012 13:28

Цитата:

Сообщение от pivas.net
кстати, вы давно руки-то проверяли.

чо?

Цитата:

Сообщение от pivas.net
В том конкретном примере что же тогда не дооптимизировали?

чо?

Цитата:

Сообщение от pivas.net
$('div.CatalogList').on('click', '> div .button', function () {
  var src = this.parentNode.childNodes[1].getAttribute('src');
});

зачем ты используешь то jQuery то не jQuery?

Цитата:

Сообщение от pivas.net
так что - менее оптимально или так же?

так более оптимально но более быдлокодерски. дам те небольшой урок, если работаешь с DOM на jQuery то работай с DOM на jquery. На вопрос "зачем?" отвечать не буду потому что лень.

ruslan_mart 17.12.2012 13:31

<div class="CatalogList">
  <div>
    <img src="img1.jpg">
    <div class="button">11</div>
  </div>
  <div>
    <img src="img2.jpg">
    <div class="button">22</div>
  </div>
  <div>
    <img src="img3.jpg">
    <div class="button">33</div>
  </div>
</div>

<script>
function catalog()
{
   var a = 'getElementsBy';
   for(i=0;i<3;i++)
   {
      eval('document.'+a+'ClassName(\'button\')['+i+']').onclick = function()
      {
         alert( eval('this.parentNode.'+a+'TagName(\'img\')[0].src') );
      }
   }
}
catalog();
</script>

pivas.net 17.12.2012 13:37

Цитата:

Сообщение от godofjavascript (Сообщение 221791)
зачем ты используешь то jQuery то не jQuery?

"не jQuery" ??? 0_o неее не слышал...

pivas.net 17.12.2012 13:39

Ruslan_xDD,
О нет только не это

godofjavascript 17.12.2012 13:39

Ruslan_xDD,
eval(eval('ёба = "ёба";ный= "ный";стыд= " стыд";')
eval("alert(eval('ёба'') + eval('ный') + eval(' стыд'))"))

andreychaki 17.12.2012 14:22

сегодня каталог не успею заверстать, завтра сделаю структуру и можно будет определиться среди методов)

andreychaki 18.12.2012 10:10

<div class="catalogitem">
<h1>Название товара</h1>
	<div class="col3">
		<div class="col_left">
			<img src="img/img1.jpg">
		</div>
		<div>
			описание товара и характеристики
		</div>
		<div class="col_right">
			<div class="AddToBasket">
				<div class="button_blue">В корзину</div>
			</div>
		</div>
	</div>
</div>

код такой. при нажатии на <div class="button_blue">В корзину</div> в переменную писать img/img1.jpg

такой код мне поможет?
$('.catalogitem .button_blue').click(function () {
     var src = this.closest('.catalogitem').find('img').attr('src');
});

tsigel 18.12.2012 10:13

Цитата:

Сообщение от andreychaki
$('.catalogitem .button_blue').click(function () {
     var src = this..closest'div').find('img').attr('src');
});

Не совсем так. Так ты найдешь div с классом "AddToBasket", т.к. closest() ищет первый селектор удовлетворяющий требованию. Тебе надо указывать первого общего родителя для кнопки "в корзину" и картинки.
$('.catalogitem .button_blue').click(function () {
     var src = this.*!*closest('.col3')*/!*.find('img').attr('src');
    // в src значение атрибута src
});

andreychaki 18.12.2012 10:18

а, ну да. лишний переход к родителю ни к чему тут

andreychaki 18.12.2012 10:31

$(function() {	
	$('.button_blue').click(function() {
		alert(1); 
		var src = this.closest('.col3').find('img').attr('src');
		alert(2); 
	});
});


"1" выводится
"2" не выводится

andreychaki 18.12.2012 10:33

починил
$(function() {	
	$('.button_blue').click(function() {
		var src = $(this).closest('.col3').find('img').attr('src');
		alert(src); 
	});
});

сделал так

tsigel 18.12.2012 10:37

Ну да) jQuery то надо включить, логично)


Часовой пояс GMT +3, время: 12:04.