Javascript 切换表格行的位置只工作一次
我做了一个决定 我有一张有两张桌子的桌子。我可以让用户通过点击向上或向下箭头来改变位置排序 但是,当我交换一次位置时,我无法再更改已更改行的位置 以下是函数:Javascript 切换表格行的位置只工作一次,javascript,jquery,Javascript,Jquery,我做了一个决定 我有一张有两张桌子的桌子。我可以让用户通过点击向上或向下箭头来改变位置排序 但是,当我交换一次位置时,我无法再更改已更改行的位置 以下是函数: function switchPosition( data, direction ) { var tableName = "artikelposition"; currentPosition = parseInt( data['position'] ); if( direction == "up" ) {
function switchPosition( data, direction )
{
var tableName = "artikelposition";
currentPosition = parseInt( data['position'] );
if( direction == "up" )
{
newPosition = currentPosition - 1;
}
else if( direction == "down" )
{
newPosition = currentPosition + 1;
}
var otherTr = $("tr[data-position='" + newPosition + "']").data("artikelid");
console.log("clicked object" + data['artikelid'] + " : current position " + data['position'] + " : new position " + newPosition);
console.log("other objekt" + $("#" + otherTr).data("artikelid") + " : current position " + $("#" + otherTr).data("position") + " : new Position " + currentPosition);
$( "#" + data['artikelid'] )
.data({
"position": newPosition
});
$( "#" + data['artikelid'] + " td.tdArticleNumber span.spanPositionNummer" )
.html( newPosition );
$( "#" + otherTr )
.data({
"position": currentPosition
});
$( "#" + otherTr + " td.tdArticleNumber span.spanPositionNummer" )
.html( currentPosition );
sortTable( tableName );
}
您可能可以用更少的代码来完成这一点(请参阅): 您可以将单击处理程序附加到图像,并使用
insertBefore()
移动行。您还可以使用内置的index()
功能(而不是摆弄数据位置
)来设置位置编号span
(根据客户的回答)
或者,如果您想对现有代码执行此操作,那么错误似乎是您选择了错误的
otherTr
第一次单击顶行上的向下箭头时,可以在控制台中看到所选行从位置1移动到位置2,中间行从位置2移动到位置1:
Angeklicktes Objekt2445 : aktuelle Position 1 : neue Position 2 (index):59
Anderes Objekt2501 : aktuelle Position 2 : neue Position 1 (index):60
但是,当您单击现在最上面一行上的底部箭头时,控制台会记录以下内容:
Angeklicktes Objekt2501 : aktuelle Position 1 : neue Position 2 (index):59
Anderes Objekt2501 : aktuelle Position 1 : neue Position 1 (index):60
请注意,顶行(正确)从位置1移动到位置2。但紧接着,同一行(
Objekt2501
,由同一位置引用)被指示从1移动到1。正如ASGM已经提到的,问题在于其他TR
。在这方面:
var otherTr = $("tr[data-position='" + newPosition + "']").data("artikelid");
我仍然不知道为什么这个表达式总是返回第一个tr
的data artikelid
,但是如果你想保存你的代码,那么你可以使用如下内容替换这一行:
$("#artikelposition tr").each(function()
{
var that = $(this);
if (that.data("position") == newPosition)
{
otherTr = that.data('artikelid');
}
});
正如Pawel所说,问题在于数据位置是动态设置的。但是,即使是他使用
$(“…”).attr(“数据-…”,值)
的想法在那里似乎也不起作用。更优雅的代码,这是肯定的:)但我仍然不明白为什么原始代码不能很好地工作,以防OP想要的解决方案。@ASGM是的,谢谢,尽管您的解决方案不仅更加优雅,但是也可以防止newPosition=-1
和newPosition=4
非常感谢。这是正确的代码。因为我的ajax函数需要tr的id。代码是有效的
$("#artikelposition tr").each(function()
{
var that = $(this);
if (that.data("position") == newPosition)
{
otherTr = that.data('artikelid');
}
});