Есть html:
<form method="POST" enctype="multipart/form-data" id="main-image-form">
<input name="image_url">
<button type="submit" enctype="multipart/form-data" class="save btn btn-warning">
<b>-100 G</b> <img src="reload.png'">
</button>
<div name="main" onclick="backgroundPreview(this);"></div>
<button name="btn"></button>
</form>
И JS:
jQuery(document).ready(function ($) {
$('#main-image-form').submit(function(e){
// some code
});
});
function backgroundPreview(elem) {
console.log(elem);
console.log(elem.name);
}
Во-первых - первая JS функция срабатывает даже при нажатии на button
, у которого name="btn"
. Не пойму почему. Судя по функции срабатывать должна только при нажатии на кнопку формы типа submit
Во-вторых - при нажатии на div
, у которого name="main"
, вызывается функция backgroundPreview
, которой из html передается объект элемента. Сам объект в консоль печатается. А вот вместо его параметра name
в консоль выводится undefined
. Почему? Ведь у данного элемента div
есть атрибут name
. Если же этот div
сменить на button
, то имя будет печататься, но тогда будет вызываться первая JS функция, как было описано в первом пункте, а этого мне нельзя допустить.
Что я могу сделать для того, чтобы при нажатии на div
вызвалась только одна вторая JS функция, и я мог бы получить атрибут name
у этого div
из JS?
Во-первых - первая JS функция срабатывает даже при нажатии на button
, у которого name="btn"
. Не пойму почему. Судя по функции срабатывать должна только при нажатии на кнопку формы типа submit
Кнопка <input type="button|submit">
или <button></button>
в form
будет являться кнопкой отправки этой самой формы.
Чтобы приведённый код работал должным образом, используйте тег type="button"
, дла кнопки с артибутом name="btn"
.
Во-вторых - при нажатии на div
, у которого name="main"
, вызывается функция backgroundPreview
, которой из html
передается объект элемента. Сам объект в консоль печатается. А вот вместо его параметра name
в консоль выводится undefined
. Почему? Ведь у данного элемента div
есть атрибут name
. Если же этот div
сменить на button, то имя будет печататься, но тогда будет вызываться первая JS
функция, как было описано в первом пункте, а этого мне нельзя допустить.
Как вам уже ответили в комментариях, для div
нет атрибута name
, используйте, допустим data-name
. В Jquery получайте данные атрибута data-name
через .data('name')
.
Пример:
$('#dsa').on('click', function(){
$('.asd').each(function(){
let dataName = $(this).data('name');
console.info(dataName);
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="asd" data-name="1">one</div>
<div class="asd" data-name="#0f0">green</div>
<div class="asd" data-name="#id1">id1</div>
<br>
<button id="dsa">Получить все data-name</button>
Виртуальный выделенный сервер (VDS) становится отличным выбором
В макете есть две картинки, которые смотрятся на 1920 экранах отлично, а на экранах 1366 они сливаются в одну картинку(использую сетку bootstrap)Как...
Нужно перемещать div по нажатию на кнопкуНаписал следующий код, но он не работает, квадрат остается на своем месте
Подскажите пожалуйста, при transform:scale(11) картинка идёт поверх другого блока, как это исправить? Эта картинка находиться в обёрточном блоке