0

我有一个表单项目列表 - 一个名称和一个用于删除项目的复选框。

<input value="www…" name="web[]" type="text" class="siteName"/>
<input name="delete" type="checkbox" value="delete" class="delete"/>

我创建它是为了交换两个项目之间的字段值,以便清空文本字段,但如果错误,值将存储在复选框中。

<script type="text/javascript"> 
$(function () { 
    $('.delete').change(function(){
        var oldVal = $('.siteName').val();
        $('.siteName').val($(this).val());
        $(this).val(oldVal);
    });
});
</script>

如果有多组表单项都被更改,我可以设置它以便之前的“.siteName”表单项是唯一更改的(我尝试了.prev()无济于事但没有使用如何正确使用它) . 我可以轻松地创建脚本的多个实例并对类名进行编号,但我认为会有更优雅的解决方案。

4

3 回答 3

2

是的..使用this参考和prev()

$('.delete').change(function(){
    var siteEle=$(this).prev();
    var oldVal = siteEle.val();
    siteEle.val($(this).val());
    $(this).val(oldVal);
});

或最近的()

$('.delete').change(function(){
    var siteEle=$(this).closest('.siteName');
    var oldVal = siteEle.val();
    siteEle.val($(this).val());
    $(this).val(oldVal);
});

closest()如果站点名称输入再次从复选框旁边开始,则可能无法为您提供正确的值。因此,如果您确定前一个元素是输入类站点名称,则prev()更好

于 2013-06-11T20:40:47.577 回答
1

我想我没有放弃理解你的问题,但让我试试你是否正在尝试实现这样的目标

http://jsbin.com/ajavul/2/edit

而不是使用 prev() 我将每个输入和复选框包装在一个父标记中,然后我在其上应用给你 jquery 代码,并进行一些小的更改。如果这不是您试图实现的目标,请向我提供更多信息。

于 2013-06-11T21:04:09.673 回答
1
$(function () { 
    $('.delete').change(function(){
        var $myPrevSiteName = $(this).prev('.siteName');
        var oldVal = $myPrevSiteName.val();
        $myPrevSiteName.val( this.value );
        $(this).val(oldVal);
    });
});
于 2013-06-11T20:41:03.817 回答