我正在尝试重新排序可排序ul
内的一组照片;要将它们保存在新的顺序中,我必须覆盖匹配的输入字段(名称和标题):
这是我的ul
结构:
<ul class="float drag1">
<g:each in="${fotos}" var="foto" status="index" >
<li class="float editimg 1" id="${index}">
<div class="float imgbox">
<span class="floatr imgdel" onclick="deletePicture('${foto.name}')" title="Löschen"></span>
<img src="${di.createImageURL(bucket:'foo', name: foto.name, format:'m')}" alt="${foto.titel}" />
<g:hiddenField name="fotos[${index}].name" readonly="readonly" value="${foto.name}"/>
</div>
<input type="text" name="fotos[${index}].titel" class="fototitel" value="${foto.titel}"/>
</li>
</g:each>
</ul>
那就是我的JS
<script type="text/javascript">
$( sort );
function sort()
{$('.drag1').sortable({
update: function(event,ui) {
var draggingElement = $(ui.item);
var ordering = draggingElement.index();
var string1 = 'fotos['+ordering+'].name' ;
var string2 = 'fotos['+ordering+'].titel' ;
alert(string1+'---'+string2);
//the following part doesn´t work, when i give those inputs unique id´s it work´s but i want this to be more self fulfilling.
var inputs = draggingElement.getElementsByTagName("input");
inputs[0].attr('name',string1);
inputs[1].attr('name',string2);
}
});
}
</script>
警告string1和string2表明这些是正确的,我只需要更新输入的name属性。但在上面的例子中,我得到一个typeError
draggingElement.getElementsByTagName is not a function
我无法弄清楚如何获取draggingElement的子输入。
答案 0 :(得分:2)
取代
var inputs = draggingElement.getElementsByTagName("input");
inputs[0].attr('name',string1);
inputs[1].attr('name',string2);
试试这个
var inputs = draggingElement.find("input");
inputs.eq(0).attr('name',string1);
inputs.eq(1).attr('name',string2);
答案 1 :(得分:1)
我认为getElementsByTagName
将为您提供HTML元素对象,而您需要jQuery元素对象 - 以便使用attr
方法。
检查jQuery手册以获得返回jQuery元素数组的正确方法,然后像您一样使用数组访问方法,或者对它们运行each
迭代器。
答案 2 :(得分:0)
代表OP发表,代替问题附录。
这是完成我需要的脚本,感谢您的答案。
$( sort );
function sort() {
$('.drag1').sortable({
update: function(event,ui) {
var draggingElement = $('.editimg');
draggingElement.each(function() {
var ordering = $(this).index();
var string1 = 'fotos['+ordering+'].name';
var string2 = 'fotos['+ordering+'].titel';
var inputs = $(this).find("input");
inputs.eq(0).attr('name',string1);
inputs.eq(1).attr('name',string2);
});
}
});
};