这是在单击按钮时将表格行更改为表单的最佳方式吗
Is this this best way to change a table row into a form on button click?
我编写了下面的jQuery,以允许在单击链接时将表中的一行更改为可编辑形式。行的类被传递到函数中。
function enableform(x) {
$("." + x +" .disabled").prop("disabled", false);
$(".icon-pencil").css("display", "none");
$( "." + x +" input" ).removeClass("disabled");
$( "." + x +" select" ).removeClass("disabled");
$( "." + x +" td.dropdown" ).addClass("test");
$( "." + x +" td" ).removeClass("dropdown");
$("." + x +" .icon-ban").css("visibility", "visible");
return false;
};
function disableform(x) {
$( "." + x +" input" ).addClass("disabled");
$( "." + x +" select" ).addClass("disabled");
$( "." + x +" td.test" ).addClass("dropdown");
$("." + x +" .disabled").prop("disabled", true);
$(".icon-pencil").css("display", "block");
$("." + x +" .icon-ban").css("visibility", "hidden");
return false;
};
基本上,表单已经存在,但应用了类使其看起来像静态文本,并使用disabled属性使其不可编辑。当单击每行末尾的按钮时,corrosponding行将变回表单,而当单击cancel按钮时则相反。基本上,我只想让更有经验的人告诉我这是否是实现这一目标的最佳方式,如果不是,如何改进?
这似乎有点乏味。我建议为这两种状态创建CSS规则,并在行的父容器上添加/删除一个类,这样您就不必向多个元素添加多个类并调整大量CSS值。
即
.parent_row input{ /* stuff for disabled inputs*/}
.parent_row input{ /* stuff for disabled selects*/}
.parent_row .icon-ban{ /* stuff for disabled .icon-ban*/}
.parent_row.enabled input{ /* stuff for enabled inputs*/}
.parent_row.enabled input{ /* stuff for enabled selects*/}
.parent_row.enabled .icon-ban{ /* stuff for enabled inputs*/}
然后在JS中切换该类。
function enableform(x) {
var element = $("." + x);
element.addClass("enabled");
element.prop("disabled", false);
return false;
};
function disableform(x) {
var element = $("." + x);
element.removeClass("enabled");
element.prop("disabled", true);
return false;
};
不确定为什么要返回false
,或者为什么要使用"disabled"属性。。。需要看到更多的代码来对此发表评论,所以我把它留在了代码
我建议在ROW中添加类(以隐藏/显示、使其可编辑等),而不是其中的每个元素。因此,在Click上,您可以让按钮获取它所在的行,然后在该行上设置一个类(类似于"可编辑")。
你曾经有这样的造型:
input.disabled{
--styles go here--
}
select.disabled{
--styles go here--
}
你现在会有
tr.enabled input{
--styles go here--
}
tr.enabled select{
--styles go here--
}
您的代码可能需要改进。由于所有不同的jquery选择,它看起来非常复杂,很难阅读。我简化了你的一些代码,如下所示:
function enableform(x) {
$("." + x +" .disabled").prop("disabled", false).removeClass("disabled");
$( "." + x +" td.dropdown" ).addClass("test");
$( "." + x +" td" ).removeClass("dropdown");
$(".icon-pencil").hide();
$("." + x +" .icon-ban").show();
return false;
};
function disableform(x) {
$( "." + x +" input select" ).addClass("disabled");
$( "." + x +" td.test" ).addClass("dropdown");
$("." + x +" .disabled").prop("disabled", true);
$(".icon-pencil").css("display", "block");
$("." + x +" .icon-ban").hide();
return false;
};
请注意,您可以在一个jquery命令中使用多个选择器语句。然后,您可以将不同的函数链接到同一个选择。
我注意到你返回了false,因为这些都是按钮按下,我猜你在html中放了onclick="dosomething()"。与其这样做,不如将点击功能绑定到按钮:
$("#buttonID").click(function(){
Do code here. $(this) is the object of the currently clicked button if we need it.
})
我还没有测试我的代码,但它应该会让你朝着正确的方向前进。
相关文章:
- 使用AJAX在Rails中提交动态表单的最佳方式是什么
- 我的表单上的SpringWebFlow2中的每个转换都需要隐藏按钮吗
- 使用Javascript/jQuery以编程方式将当前锚点/哈希/片段附加到任何表单操作url
- 你能提交一个带有文本输入数组的表单吗
- 在表单同步提交后执行 js 吗?
- Ajax 请求后,以正常方式提交表单
- 在发布表单输入时,我可以重定向到一个新的php文件吗
- 使用两个按钮(提交按钮和普通按钮),它们应该以不同的方式提交相同的表单
- 临时存储用户表单数据的最佳方式,用于表单重新提交
- 我可以使用ajax按钮获取下拉值并填写表单吗
- 您可以在Google Analytics中存储表单选择吗?
- 我可以在javascript中使用innerHTML中的表单元素吗?
- 我需要 JavaScript 表单验证吗?
- 你能在禁用Javascript的情况下进行表单提交吗?
- 我应该避免多部分/表单请求吗
- 这是在单击按钮时将表格行更改为表单的最佳方式吗
- 我可以通过javascript通过名称识别表单按钮吗
- 所选内容在IE10中是无效的表单名称吗
- 调用form.serializable()时必须输入表单属性吗?
- 我可以将单击的元素的id中继到Rails中的表单中吗