2013-02-14 42 views
0

我试图重新排序一组可排序内的一组照片ul;将它们保存在新命令我必须覆盖匹配的输入字段(姓名和职务):Jquery Draggable Sortable写入正确的输入,让子元素不工作

这是我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显示这些是正确的,我只需要更新输入的名称属性。但在上面的例子中,我得到一个类型错误

draggingElement.getElementsByTagName is not a function 

我不能弄清楚如何获得draggingElement的子输入。

+0

啊,我有另一个想法 - 错字?你的变量被称为'draggingElement',但你的错误包含'dragginElement'。 – halfer 2013-02-14 10:31:00

+0

啊这只是坏的复制和粘贴对不起 – 2013-02-14 10:33:22

回答

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); 
+0

是的,这就是它,谢谢你让我意识到我必须更新每个可拖动的元素与其新的索引,而不只是draggingElement,我想我只需要更换$(UI。 item),但是所有可拖动元素的getter是什么?无法找到最新的文档 – 2013-02-14 10:45:32

1

我认为getElementsByTagName会为您提供HTML元素对象,而您想要jQuery元素对象 - 以便使用attr方法。

检查jQuery手册以获取返回jQuery元素数组的正确方法,然后按照您所做的操作使用数组访问方法,或者对其执行迭代器运算each

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); 
     }); 
    } 
    }); 
};