从jquery sortable中删除div

时间:2010-01-11 09:57:44

标签: jquery jquery-ui jquery-ui-sortable

我为内联网开发了一个“Google-Maps-like”用户界面,用户可以在其中添加计算路线和距离的步骤。我正在使用可排序的div来重新排序步骤。现在我想删除步骤,但我的JavaScript / jQuery代码根本不起作用。你能救我吗?

我的jQuery代码:

$(document).ready(function() {
        $("#sortable").sortable();
        $("#sortable").disableSelection();
});



    function addStep() {
        var temp = $('.template').clone();
        $(temp).removeClass("template");
        $(temp).addClass("sort");
        $('#sortable').append(temp);

    }
    function removeStep() {

        $(this).closest('div.sort').remove();
        $("#sortable").sortable('refresh');
    }

我的HTML:

//template to add new step
 <div class="template">
        <input type="text" name="addressN" value="" class="address" />
        <input type="button" class="remove" value="Remove" onclick="removeStep();" />
    </div>
//sortable list of step
    <div id="sortable">
        <div class="sort">
            <input type="text" name="Start" value="" class="address" />
        </div>
        <div class="sort">
            <input type="text" name="End" value="" class="address" />
        </div>
    </div>
    <input type="submit" value="Get Route!" onclick="showLocation(); return false;" />
    <input type="submit" value="Add Step" onclick="addStep(); return false;" />

提前致谢!

1 个答案:

答案 0 :(得分:4)

您的addStep()功能出现问题。我将尝试通过在原始代码中添加一些注释来解释:

function addStep() {
 // Here, you store a reference to the jQuery Object containing the clone in the var temp.
 var temp = $('.template').clone();
 // Here, you wrap temp (which already is a jQuery Object) inside $().
 // Fix: replace '$(temp)' by 'temp'
 $(temp).removeClass('template');
 $(temp).addClass('sort');
 $('#sortable').append(temp);
}

修复此问题后,加上一些额外的优化,这就变成了:

function addStep() {
 $('.template').clone().removeClass('template').addClass('sort').appendTo('#sortable');
}

此外,您的removeStep()功能错误地使用了this。您可能想要执行以下操作:

$.fn.removeStep = function() {
 // `this` is now a reference to the jQuery Object on which `.removeStep()` was invoked 
 this.closest('div.sort').remove();
 $('#sortable').sortable('refresh');
 // Allow chaining
 return this;
}

现在,您可以省略HTML模板中的onclick="removeStep();",并在jQuery中使用类似的内容:

$('.remove').live('click', function() {
 $(this).removeStep();
}