我正试图向上或向下移动动态表单的div元素:
这是我的表格:
<form name="f_form">
Order name <input type="text" name="ord" id="order" />
<div id="fields">
<div id="hid1"><a href="#" id="did1">
<img src="d.jpg" /></a><a href="#" id="uid1">
<img src="u.jpg" /></a><input type="text" name="p_name[]" id="names" />
<input type="text" name="quant[]" id="quant" size="3" />
<input type="text" name="pr[]" id="price" size="10" />
<input type="text" name="sum_a" id="sum" size="10" disabled="disabled"/>
</div>
<input type="button" name="nauj" id="nau" value="Add item"/><br />
</div>
</form>
当我点击“添加项目”按钮时,JS被称为:
$("#nau").click(function () {
(newdiv = document.createElement('div')).id = "hid"+ (counter + 1) +"";
newdiv.innerHTML = '<a href="#" id="did'+ (counter + 1) +'"><img src="d.jpg" /></a><a href="#" id="uid'+ (counter + 1) +'"><img src="u.jpg" /></a><input type="text" name="p_name[]" id="names" />
<input type="text" name="quant[]" id="quant" size="3" />
<input type="text" name="pr[]" id="price" size="10" />
<input type="text" name="sum_a" id="sum" size="10" disabled="disabled"/><a href="#" id="delete'+ (counter + 1) +'">X</a>';
document.getElementById('fields').appendChild(newdiv);
counter++;
});
每个表单字段行都有两个箭头(向上和向下)图像:<a href="#" id="did'+ (counter + 1) +'"><img src="d.jpg" /></a><a href="#" id="uid'+ (counter + 1) +'"><img src="u.jpg" /></a>
当我点击箭头时,我需要向上或向下移动所有表格字段行(移动<DIV id=hid..>
)尝试这样但它确实有效..(向上移动功能)
$("a[id^='uid']").on('click', function() {
var numrow = $(this).attr("id");
numrow = numrow.substr(3);
var nr = 1;
sumrow = numrow - nr;
var eil = 'id=' + numrow;
numrowas = "#hid"+numrow;
srowas = "#hid"+sumrow;
$(numrowas).before($(srowas));
});
感谢您的建议。
答案 0 :(得分:1)
首先,您没有正确使用on()
- 事件处理程序没有像您期望的那样绑定。正确的语法是:
// "watch for" elements matching selector "a[id^='did']" created inside #fields
$("#fields").on('click', "a[id^='did']", function(e) {...})
其次,您正在尝试对id属性进行操作,以便在div之前/之后deremine附加当前元素。这是一个混乱,一个更清洁的方法是使用.next()
和.prev()
来确定与被点击的节点相关的下一个或上一个节点是什么。
我创造了一个小提琴作为例子:http://jsfiddle.net/SPgax/22/
正如旁注:你的代码很乱,我没有采取行动,因为它超出了你的问题的范围。没有冒犯:)
答案 1 :(得分:1)
与@WTK相同的解决方案,使用.prev()
,但方法不同。哦,我无法抗拒并做了一些清理;)