Получение имени элемента JS

131
31 августа 2019, 00:50

Есть 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?

Answer 1

Во-первых - первая 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>

READ ALSO
Картинки большие для экранов 1368x768

Картинки большие для экранов 1368x768

В макете есть две картинки, которые смотрятся на 1920 экранах отлично, а на экранах 1366 они сливаются в одну картинку(использую сетку bootstrap)Как...

122
Не работает js скрипт

Не работает js скрипт

Нужно перемещать div по нажатию на кнопкуНаписал следующий код, но он не работает, квадрат остается на своем месте

108
Картинка идёт поверх другого блока

Картинка идёт поверх другого блока

Подскажите пожалуйста, при transform:scale(11) картинка идёт поверх другого блока, как это исправить? Эта картинка находиться в обёрточном блоке

107