Ich benutze Bootstrap 3 und KnockoutJS.Bootstrap-Kontextmenü Dropdown in Tabelle mit tbody tr onclick Ereignis
Ich habe eine Tabelle mit 5 Spalten und möchte eine 6. Spalte für Kontextmenü Aktionen hinzufügen, mit Bootstrap Dropdown.
Hier ist mein html:
<table id="employeesTable" class="table table-condensed table-striped table-bordered table-hover myDefaultTable">
<thead>
<tr>
<th class="myDefaultTable-left">Employee Name</th>
<th>... 4 other columns</th>
<th>Actions</th>
</tr>
</thead>
<tbody data-bind="foreach: Employee">
<tr data-bind="attr: { 'id': EmployeeId }">
<td class="myDefaultTable-left" data-bind="text: EmployeeName"></td>
<td data-bind="text: col2"></td>
<td data-bind="text: col3"></td>
<td data-bind="text: col4"></td>
<td data-bind="text: col5"></td>
<td>
<div class="dropdown">
<button class="btn btn-default dropdown-toggle" type="button" id="dropdownMenu1" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">Actions
<span class="caret"></span>
</button>
<ul class="dropdown-menu" aria-labelledby="dropdownMenu1">
<li><a href="#" data-bind="click: $parent.RemoveEmployee.bind($parent), clickBubble: false">Remove employee</a></li>
<li><a href="#" data-bind="click: $parent.DuplicateEmployee.bind($parent), clickBubble: false">Duplicate employee</a></li>
</ul>
</div>
</td>
</tr>
</tbody>
</table>
Mein Problem ist, dass in JavaScript, ich habe (und behalten will), um eine Klick-Aktion, die ein Detailbild des geklickten Element in der Tabelle öffnet, wie folgt :
$container.on('click', '#employeesTable tbody tr', { self: self }, self._employeeDetailClick);
Mein Kontextmenü Ereignisse ausgesetzt sind wie folgt:
self._model = ko.mapping.fromJS(result);
self._model.self = self;
self._model.RemoveEmployee = self._removeEmployee;
Suche für eine Möglichkeit, das "tbody tr
on click event" nicht aufzurufen, wenn der Benutzer auf Spalte 6 klickt, aber das entsprechende Kontextmenü-Ereignis aufruft. Ich habe versucht clickBubble: false
, aber es funktioniert nicht.
Wenn ich Kommentar-out die Linie
$container.on('click', '#employeesTable tbody tr', { self: self }, self._employeeDetailClick);
... dann mein Kontextmenü funktioniert.
Könnten Sie den Beitrag bearbeiten und fügen Sie // etwas Code entfernen, um sie in eine machen [MCVE]? Ein Teil des Posts ist wegen fehlender und/oder möglicherweise irrelevanter Bits schwer zu verfolgen. – Jeroen
Mit Knockout haben Sie in der Regel entweder einen 'click'-Binding-Handler oder einen Custom-Binding-Handler für die Integration mit DOM-manipulierenden Widgets. Hast du versucht, beides zu benutzen? – Jeroen
Ich habe die jQuery-Ereignisbehandlung entfernt und eine Knockout-Klickbindung für die ersten 5 Spalten der Tabelle implementiert. Das hat mein Problem gelöst. Danke @ Jeroen und user3297291 für die Führung in dieser Richtung. Es ist in der Tat viel klarer. –