#javascript #html #jquery #bootstrap-4
#javascript #HTML #jquery #bootstrap-4
Вопрос:
Обычно я являюсь серверным разработчиком; но для этого я знаю, что меня поймали на том, что я не работаю с тем, как работает веб-браузер.
Я оставил предупреждение JavaScript там для простоты использования. в зависимости от того, на какую кнопку вы нажали во всплывающем окне, оно должно всплыть и сказать leave-X или office-x, где X — идентификатор, частью которого была кнопка.
Но все они говорят «оставить-1» или «офис-1», независимо от того, какое поле я выбираю. Я знаю, что извлекаю правильные данные из правильного поля, так как при изменении «1» на «foo» будет отображаться office-foo.
Я бы предпочел не иметь отдельного пользовательского всплывающего окна для каждой ячейки таблицы, поскольку это были бы сотни записей в конечном продукте.
Мой базовый код таблицы 2×2 и jQuery / bootstrap:
<div class="container">
<table class="table table-striped">
<tr>
<th>Col 1</th>
<th>Col 2</th>
</tr>
<tr>
<td data-placement="bottom" tabindex=-1 data-toggle="popover" data-trigger="focus" data-container="body" id="1" class="td-Office">1</td>
<td data-placement="bottom" tabindex=-1 data-toggle="popover" data-trigger="focus" data-container="body" id="2" class="td-Office">2</td>
</tr>
<tr>
<td data-placement="bottom" tabindex=-1 data-toggle="popover" data-trigger="focus" data-container="body" id="3" class="td-Office">3</td>
<td data-placement="bottom" tabindex=-1 data-toggle="popover" data-trigger="focus" data-container="body" id="4" class="td-Office">4</td>
</tr>
</table>
</div>
var parentClass = $("[data-toggle=popover]").attr('id');
$("[data-toggle=popover]").popover({html: true, content: `<div id="popover-content">
<button id="office-` parentClass `" class="btn btn-sm btn-Office" onclick="toggleTD(this);">Office</button>
<button id="leave-` parentClass `" class="btn btn-sm btn-Leave" onclick="toggleTD(this);">Leave</button>
</div>`});
$('.popover-dismiss').popover({
trigger: 'focus'
})
function toggleTD(elm) {
alert(elm.id);
}
Комментарии:
1. Попробуйте поиграть с этим jsfiddle.net/J7nDz/48 и посмотрите, не загорятся ли какие-нибудь лампочки.
2. Это работает для вас? jsfiddle.net/J7nDz/48
3. Это похоже на метод грубой силы, который я бы предпочел не делать. Как уже упоминалось, в конечном итоге потребуются сотни всплывающих окон. Я знаю, что где-то в этом есть решение: jqueryscript.net/menu /. … но я ни за что на свете не смогу этого понять.
Ответ №1:
Проблема в том, что значение ParentClass всегда равно «1»;
Если вы хотите использовать идентификатор кнопки, замените содержимое функцией и используйте this.id:
$("[data-toggle=popover]").popover({
html: true,
content: function() {
return `<div id="popover-content">
<button id="office-` this.id `" class="btn btn-sm btn-Office" onclick="toggleTD(this);">Office</button>
<button id="leave-` this.id `" class="btn btn-sm btn-Leave" onclick="toggleTD(this);">Leave</button>
</div>`
}
});
Комментарии:
1. Отлично! Я знал, что это будет что-то простое, и это исправило это
2. рад помочь! 😉