Sorry I can't send you my full code, but better yet, I've recreated the error on a new page:
SQL using MariaDB:
CREATE TABLE IF NOT EXISTS `locations` (
`location_id` int(11) NOT NULL AUTO_INCREMENT,
`street_address` varchar(40) DEFAULT NULL,
`postal_code` varchar(12) DEFAULT NULL,
`city` varchar(30) NOT NULL,
`state_province` varchar(25) DEFAULT NULL,
`country_id` char(2) NOT NULL,
`state` tinyint(1) NOT NULL DEFAULT 0,
PRIMARY KEY (`location_id`)
) ENGINE=InnoDB AUTO_INCREMENT=2701 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
REPLACE INTO `locations` (`location_id`, `street_address`, `postal_code`, `city`, `state_province`, `country_id`, `state`) VALUES
(1400, '2014 Jabberwocky Rd', '26192', 'Southlake', 'Texas', 'US', 0),
(1500, '2011 Interiors Blvd', '99236', 'South San Francisco', 'California', 'US', 0),
(1700, '2004 Charade Rd', '98199', 'Seattle', 'Washington', 'US', 0),
(1800, '147 Spadina Ave', 'M5V 2L7', 'Toronto', 'Ontario', 'CA', 0),
(2400, '8204 Arthur St', NULL, 'London', NULL, 'UK', 0),
(2500, 'Magdalen Centre, The Oxford Science Park', 'OX9 9ZB', 'Oxford', 'Oxford', 'UK', 0),
(2700, 'Schwanthalerstr. 7031', '80925', 'Munich', 'Bavaria', 'DE', 0);
EJS View:
<!-- Wappler include head-page="layouts/dashboard_v2" fontawesome_5="cdn" bootstrap5="local" is="dmx-app" id="testSendForm" appConnect="local" components="{dmxStateManagement:{},dmxBootstrap5TableGenerator:{},dmxBootstrap5PagingGenerator:{},dmxBootbox5:{}}" -->
<dmx-query-manager id="query1"></dmx-query-manager>
<meta name="ac:route" content="/testSendForm">
<dmx-serverconnect id="sc_testTablePopulate" url="/api/testPopulateForm" dmx-param:offset="query1.data.offset" dmx-param:limit="20" dmx-param:sort="query1.data.sort" dmx-param:dir="query1.data.dir"></dmx-serverconnect>
<div class="container">
<div class="row">
<div class="table-responsive">
<table class="table table-striped table-hover">
<thead>
<tr>
<th class="sorting" dmx-on:click="query1.set('sort','location_id');query1.set('dir',query1.data.dir == 'desc' ? 'asc' : 'desc')" dmx-class:sorting_asc="query1.data.sort=='location_id' && query1.data.dir == 'asc'" dmx-class:sorting_desc="query1.data.sort=='location_id' && query1.data.dir == 'desc'">Location</th>
<th class="sorting" dmx-on:click="query1.set('sort','street_address');query1.set('dir',query1.data.dir == 'desc' ? 'asc' : 'desc')" dmx-class:sorting_asc="query1.data.sort=='street_address' && query1.data.dir == 'asc'" dmx-class:sorting_desc="query1.data.sort=='street_address' && query1.data.dir == 'desc'">Street address</th>
<th class="sorting" dmx-on:click="query1.set('sort','postal_code');query1.set('dir',query1.data.dir == 'desc' ? 'asc' : 'desc')" dmx-class:sorting_asc="query1.data.sort=='postal_code' && query1.data.dir == 'asc'" dmx-class:sorting_desc="query1.data.sort=='postal_code' && query1.data.dir == 'desc'">Postal code</th>
<th class="sorting" dmx-on:click="query1.set('sort','city');query1.set('dir',query1.data.dir == 'desc' ? 'asc' : 'desc')" dmx-class:sorting_asc="query1.data.sort=='city' && query1.data.dir == 'asc'" dmx-class:sorting_desc="query1.data.sort=='city' && query1.data.dir == 'desc'">City</th>
<th class="sorting" dmx-on:click="query1.set('sort','state_province');query1.set('dir',query1.data.dir == 'desc' ? 'asc' : 'desc')" dmx-class:sorting_asc="query1.data.sort=='state_province' && query1.data.dir == 'asc'" dmx-class:sorting_desc="query1.data.sort=='state_province' && query1.data.dir == 'desc'">State province</th>
<th class="sorting" dmx-on:click="query1.set('sort','country_id');query1.set('dir',query1.data.dir == 'desc' ? 'asc' : 'desc')" dmx-class:sorting_asc="query1.data.sort=='country_id' && query1.data.dir == 'asc'" dmx-class:sorting_desc="query1.data.sort=='country_id' && query1.data.dir == 'desc'">Country</th>
<th class="sorting" dmx-on:click="query1.set('sort','null');query1.set('dir',query1.data.dir == 'desc' ? 'asc' : 'desc')" dmx-class:sorting_asc="query1.data.sort=='null' && query1.data.dir == 'asc'" dmx-class:sorting_desc="query1.data.sort=='null' && query1.data.dir == 'desc'">Action</th>
</tr>
</thead>
<tbody is="dmx-repeat" dmx-generator="bs5table" dmx-bind:repeat="sc_testTablePopulate.data.query.data" id="tableRepeat1" dmx-state="query1" dmx-sort="sort" dmx-order="dir">
<tr>
<td dmx-text="location_id"></td>
<td dmx-text="street_address"></td>
<td dmx-text="postal_code"></td>
<td dmx-text="city"></td>
<td dmx-text="state_province"></td>
<td dmx-text="country_id"></td>
<td>
<form id="form1" is="dmx-serverconnect-form" method="post" action="/api/testUpdateRow" dmx-on:success="sc_testTablePopulate.load({});notifies1.success('Successful removed')">
<input id="text1" name="location_id" type="hidden" class="form-control" dmx-bind:value="location_id">
<button id="btn1" class="btn btn-primary" dmx-on:click="run({'bootbox.confirm':{message:'Remove row?',then:{steps:{run:{outputType:'text',action:`form1.submit(true)`}}}}})">Confirm</button>
</form>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<ul class="pagination justify-content-center" dmx-populate="sc_testTablePopulate.data.query" dmx-state="query1" dmx-offset="offset" dmx-generator="bs5paging">
<li class="page-item" dmx-class:disabled="sc_testTablePopulate.data.query.page.current == 1" aria-label="First">
<a href="javascript:void(0)" class="page-link" dmx-on:click="query1.set('offset',sc_testTablePopulate.data.query.page.offset.first)"><span aria-hidden="true">‹‹</span></a>
</li>
<li class="page-item" dmx-class:disabled="sc_testTablePopulate.data.query.page.current == 1" aria-label="Previous">
<a href="javascript:void(0)" class="page-link" dmx-on:click="query1.set('offset',sc_testTablePopulate.data.query.page.offset.prev)"><span aria-hidden="true">‹</span></a>
</li>
<li class="page-item" dmx-class:active="title == sc_testTablePopulate.data.query.page.current" dmx-class:disabled="!active" dmx-repeat="sc_testTablePopulate.data.query.getServerConnectPagination(2,1,'...')">
<a href="javascript:void(0)" class="page-link" dmx-on:click="query1.set('offset',(page-1)*sc_testTablePopulate.data.query.limit)">{{title}}</a>
</li>
<li class="page-item" dmx-class:disabled="sc_testTablePopulate.data.query.page.current == sc_testTablePopulate.data.query.page.total" aria-label="Next">
<a href="javascript:void(0)" class="page-link" dmx-on:click="query1.set('offset',sc_testTablePopulate.data.query.page.offset.next)"><span aria-hidden="true">›</span></a>
</li>
<li class="page-item" dmx-class:disabled="sc_testTablePopulate.data.query.page.current == sc_testTablePopulate.data.query.page.total" aria-label="Last">
<a href="javascript:void(0)" class="page-link" dmx-on:click="query1.set('offset',sc_testTablePopulate.data.query.page.offset.last)"><span aria-hidden="true">››</span></a>
</li>
</ul>
</div>
API testPopulateForm.json
{
"meta": {
"$_GET": [
{
"type": "text",
"name": "sort"
},
{
"type": "text",
"name": "dir"
},
{
"type": "text",
"name": "offset"
},
{
"type": "text",
"name": "limit"
}
]
},
"exec": {
"steps": {
"name": "query",
"module": "dbconnector",
"action": "paged",
"options": {
"connection": "db",
"sql": {
"type": "select",
"columns": [
{
"table": "locations",
"column": "location_id"
},
{
"table": "locations",
"column": "street_address"
},
{
"table": "locations",
"column": "postal_code"
},
{
"table": "locations",
"column": "city"
},
{
"table": "locations",
"column": "state_province"
},
{
"table": "locations",
"column": "country_id"
}
],
"params": [
{
"operator": "equal",
"type": "expression",
"name": ":P1",
"value": "{{0}}",
"test": ""
}
],
"table": {
"name": "locations"
},
"joins": [],
"primary": "location_id",
"query": "select `location_id`, `street_address`, `postal_code`, `city`, `state_province`, `country_id` from `locations` where `locations`.`state` = ?",
"wheres": {
"condition": "AND",
"rules": [
{
"id": "locations.state",
"field": "locations.state",
"type": "boolean",
"operator": "equal",
"value": "{{0}}",
"data": {
"table": "locations",
"column": "state",
"type": "boolean",
"columnObj": {
"type": "boolean",
"default": "0",
"primary": false,
"nullable": false,
"name": "state"
}
},
"operation": "="
}
],
"conditional": null,
"valid": true
}
}
},
"output": true,
"meta": [
{
"name": "offset",
"type": "number"
},
{
"name": "limit",
"type": "number"
},
{
"name": "total",
"type": "number"
},
{
"name": "page",
"type": "object",
"sub": [
{
"name": "offset",
"type": "object",
"sub": [
{
"name": "first",
"type": "number"
},
{
"name": "prev",
"type": "number"
},
{
"name": "next",
"type": "number"
},
{
"name": "last",
"type": "number"
}
]
},
{
"name": "current",
"type": "number"
},
{
"name": "total",
"type": "number"
}
]
},
{
"name": "data",
"type": "array",
"sub": [
{
"type": "number",
"name": "location_id"
},
{
"type": "text",
"name": "street_address"
},
{
"type": "text",
"name": "postal_code"
},
{
"type": "text",
"name": "city"
},
{
"type": "text",
"name": "state_province"
},
{
"type": "text",
"name": "country_id"
}
]
}
],
"outputType": "object",
"type": "dbconnector_paged_select"
}
}
}
API testUpdateRow.json
{
"meta": {
"$_POST": [
{
"type": "number",
"name": "location_id"
}
]
},
"exec": {
"steps": {
"name": "",
"module": "core",
"action": "condition",
"options": {
"if": "{{$_POST.location_id}}",
"then": {
"steps": {
"name": "update",
"module": "dbupdater",
"action": "update",
"options": {
"connection": "db",
"sql": {
"type": "update",
"values": [
{
"table": "locations",
"column": "state",
"type": "boolean",
"value": "{{1}}"
}
],
"table": "locations",
"wheres": {
"condition": "AND",
"rules": [
{
"id": "location_id",
"type": "double",
"operator": "equal",
"value": "{{$_POST.location_id}}",
"data": {
"column": "location_id"
},
"operation": "="
}
]
},
"returning": "location_id",
"query": "update `locations` set `state` = ? where `location_id` = ?",
"params": [
{
"name": ":P1",
"type": "expression",
"value": "{{1}}",
"test": ""
},
{
"operator": "equal",
"type": "expression",
"name": ":P2",
"value": "{{$_POST.location_id}}",
"test": ""
}
]
}
},
"meta": [
{
"name": "affected",
"type": "number"
}
]
}
},
"else": {
"steps": {
"name": "error400",
"module": "core",
"action": "response",
"options": {
"status": 400,
"data": "NoData"
}
}
}
},
"outputType": "boolean"
}
}
}
Now, just clic on Confirm button on the Action column in table, the first time bootbox show up, then clic con Ok button and the table update correctly (Dev tab show XHR of the form updated).
Now, clic on any other Confirm button, the bootbox show up but the OK button now have not any action, no XHR of this new submit form:
If I remove sc_testTablePopulate.load({})
from form1 on dmx-on:success
the bootbox a second time works normally, but of course this is not a option because sc_testTablePopulate.load({})
it is need it to update data from Table.