0

我正在尝试在 sortable 中重新排序一组照片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 的子输入。

4

3 回答 3

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);
于 2013-02-14T10:33:23.810 回答
1

我想getElementsByTagName你会得到 HTML 元素对象,而你想要 jQuery 元素对象——以便使用该attr方法。

查看 jQuery 手册以获取返回 jQuery 元素数组的正确方法,然后像您所做的那样使用数组访问方法,或者each在它们上运行迭代器。

于 2013-02-14T10:28:34.457 回答
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);
       });
     }
    });
};
于 2013-02-14T15:40:28.510 回答