gpt4 book ai didi

javascript - 如何实现复选框的属性来跟踪表中每一行的更改,而不使用 Grid 对象或 jQuery.Data(Input)?

转载 作者:行者123 更新时间:2023-12-03 11:14:23 24 4
gpt4 key购买 nike

enter image description here

如何仅在更改的行上有选择地执行表单请求而不涉及 Grid 或 jQuery.Data(input) 逻辑?

除了程序很旧之外,AJAX 在这里不适用,因为我不希望在用户输入更改时每行都触发更改事件!我想要的是一次提交:在完成所有行更改后,用户只需执行 1 个点击事件!

那么,最小化浏览器-服务器行程的最简单、干净的方法是什么?

每一行都有一个不可见的复选框

<input type="checkbox" style="display:none;" name="N_CheckChanged">

以及该行上的其他隐藏对象以跟踪更改。

<input type="hidden" value="beforeChangeVal" name="h_CertainObject">

我在服务器端进行更改的代码是

string[] formCheckChanged = Request.Form.GetValues("N_CheckChanged");

但是,如果您想使用名称派生(提取复选框的前缀来派生其他对象的名称)来散列到对象以获取其新值来更新数据库,则代码可能会非常困惑。而且,这不好。

最佳答案

要回答上述问题,你必须知道

Checkbox 元素具有这两个不同的属性

我。检查==真/假

ii. value := '任何字符串值'

一个与另一个无关。

在您的 CHECKED 属性中,仅当该行发生更改时才将其设置为 true。复选框对象将使自己在 Server.Request 中不可见(禁用)否则

在您的 VALUE 属性中,您可以隐藏该行的所有要发布的值(类似于 jQuery.Data(input)),忽略选中的属性 == true/false!

浏览器提交,您执行

function do_checkChanges() {// checking each row
for (var ii = 0; ii < document.getElementsByName("N_CheckChanged").length; ii++) {
document.getElementsByName("N_CheckChanged")[ii].checked = 0;
//detect changes
if ((document.getElementsByName("R_DateResume")[ii].value != document.getElementsByName("h_DateResume")[ii].value)
|| (document.getElementsByName("R_CheckInhibited")[ii].value != document.getElementsByName("h_CheckInhibited")[ii].value)
)
{
document.getElementsByName("N_CheckChanged")[ii].checked = 1;//mark the change
document.getElementsByName("N_CheckChanged")[ii].value =
document.getElementsByName("h_RowID")[ii].value + "|"
+ document.getElementsByName("R_CheckInhibited")[ii].checked + "|"
+ document.getElementsByName("R_DateResume")[ii].value
;
}
}
whoPostBack.value = 'view2';
}

将更新存储在复选框内后,您的服务器端代码应该变得轻而易举!在服务器端,您需要做的就是

string[] formCheckChanged = Request.Form.GetValues("N_CheckChanged");
if (formCheckChanged != null)
{
foreach (string checkChanged in formCheckChanged)
{
sValues = checkChanged.Split('|');
correspondedRow = sValues[0];
data1 = sValues[1];
data2 = sValues[2];
theSqlCmd.CommandText =
" update tb_LOG set InhibitedNow='" + data1 + "', InhibitEnd = '" + data2 + "', InhibitedBy = '" + MyConnections.userID
+ "' where RowID =" + correspondedRow;
try
{
theSqlCmd.ExecuteNonQuery();
}
catch (Exception eX)
{
Response.Write(theSqlCmd.CommandText); Response.End();
}
}
//Response.End();
}

关于javascript - 如何实现复选框的属性来跟踪表中每一行的更改,而不使用 Grid 对象或 jQuery.Data(Input)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27408576/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com