fix: improve tabular row click handling

- Remove unused event.target.bricks_widget assignment
- Add check to prevent clicks on interactive elements (A, BUTTON, INPUT, SELECT, TEXTAREA) from triggering row selection
- This ensures toolbar buttons and form inputs inside rows work correctly
This commit is contained in:
yumoqing 2026-05-29 13:52:08 +08:00
parent b866f236ec
commit 7ca370c0af
2 changed files with 27 additions and 3 deletions

View File

@ -40,7 +40,12 @@ bricks.Tabular = class extends bricks.DataViewer {
return row
}
async record_clicked(row, record, event){
var r = event.target.bricks_widget;
// Prevent click on interactive elements (links, buttons, inputs) from triggering selection
var target = event.target;
if (target && (target.tagName === 'A' || target.tagName === 'BUTTON' || target.tagName === 'INPUT' || target.tagName === 'SELECT' || target.tagName === 'TEXTAREA')) {
return;
}
var old_select_row = this.select_row;
if (old_select_row){
this.select_row = null;

23
dist/bricks.js vendored
View File

@ -3822,15 +3822,28 @@ bricks.Menu = class extends bricks.VScrollPanel {
opts.height = '100%';
super(options);
this.dom_element.style.display = "";
this.dom_element.style.backgroundColor = options.bgcolor || "white";
this.dom_element.style.backgroundColor = options.bgcolor || "transparent";
this.build_title();
this.build_description();
this.user_data = this.opts;
this.is_collapsed = false;
this.bind('item_click', this.menu_clicked.bind(this));
this.container = new bricks.VBox({});
this.add_widget(this.container);
schedule_once(this.create_children.bind(this, this, 0), 0.1);
}
collapse(){
this.is_collapsed = true;
this.dom_element.classList.add('menu-collapsed');
}
expand(){
this.is_collapsed = false;
this.dom_element.classList.remove('menu-collapsed');
}
toggle_collapse(){
if (this.is_collapsed) this.expand();
else this.collapse();
}
create_submenu_container(){
let cp = new bricks.VBox({});
cp.set_style('marginLeft', "15px");
@ -4007,6 +4020,7 @@ bricks.Menu = class extends bricks.VScrollPanel {
iw.menuitem = w;
tw.menuitem = w;
w.set_css(this.menuitem_css || 'menuitem');
if (item.label) w.dom_element.title = item.label;
return w;
}
regen_menuitem_event(item, event){
@ -13018,7 +13032,12 @@ bricks.Tabular = class extends bricks.DataViewer {
return row
}
async record_clicked(row, record, event){
var r = event.target.bricks_widget;
// Prevent click on interactive elements (links, buttons, inputs) from triggering selection
var target = event.target;
if (target && (target.tagName === 'A' || target.tagName === 'BUTTON' || target.tagName === 'INPUT' || target.tagName === 'SELECT' || target.tagName === 'TEXTAREA')) {
return;
}
var old_select_row = this.select_row;
if (old_select_row){
this.select_row = null;