JqueryUI Slider与Sortable冲突

时间:2014-03-26 20:20:43

标签: jquery jquery-ui slider uislider

我尝试使用不同类型的输入创建拖放表单。选择,文本框和单选框工作正常,但是当拖动到可排序字段时,范围滑块不起作用。

我在这里创造了一个小提琴:

http://jsfiddle.net/b8HpR/

虽然硬编码的是有效的。我需要一个双滑块,否则HTML5范围输入会很棒。

任何帮助将不胜感激!

$(function () {
$(".slider-range").slider({
    range: true,
    min: 0,
    max: 500,
    values: [75, 300],
    slide: function (event, ui) {
        $(".amount").val("$" + ui.values[0] + " - $" + ui.values[1]);
    }
});
$("#amount").val("$" + $("#slider-range").slider("values", 0) +
    " - $" + $("#slider-range").slider("values", 1));



/* populate the list of fields into the div */
var fields = getFields();
$(fields).each(function (index, value) {
    $("#listOfFields").append("<div class='fld' fieldtype='" + value.type + "'>" + value.label + "</div>");
});

$(".fld").draggable({
    helper: "clone",
    stack: "#containerTable div",
    cursor: "move"
});

$(".droppedFields").droppable({
    activeClass: "activeDroppable",
    hoverClass: "hoverDroppable",
    accept: ":not(.ui-sortable-helper)",
    drop: function (event, ui) {
        var fieldtype = $(ui.draggable).attr("fieldtype");
        $("<div  class='fld' fieldtype='" + fieldtype + "'></div>").html(ui.draggable.html()).appendTo(this);
    }
});

$(".droppedFields").sortable();
$(".droppedFields").disableSelection();

1 个答案:

答案 0 :(得分:2)

创建一个函数initSliders ()并在构造您放下的对象时调用此函数。虽然这会导致多次初始化,但通常不会引起问题。

$(".droppedFields").droppable({
    activeClass: "activeDroppable",
    hoverClass: "hoverDroppable",
    accept: ":not(.ui-sortable-helper)",
    drop: function (event, ui) {
        var fieldtype = $(ui.draggable).attr("fieldtype");
        $("<div class='fld' fieldtype='" + fieldtype + "'></div>").html(ui.draggable.html()).appendTo(this);

        // initSlider is called here after appending the code.
        initSliders();
    }
});

因此,每次初始化一个新滑块时,我都会假设它已初始化为预设值,因此它已初始化为全局定义的minValuemaxValue的值。为了确保所有滑块都改变了位置,我将$(".slider-range").slider("option", "values", [minValue, maxValue]);添加到幻灯片功能中。

var minValue = 75;
var maxValue = 300;

function initSliders() {
    $(".slider-range").slider({
        range: true,
        min: 0,
        max: 500,
        values: [minValue, maxValue],
        slide: function (event, ui) {
            minValue = ui.values[0];
            maxValue = ui.values[1];
            $(".amount").val("$" + minValue + " - $" + maxValue);
            $(".slider-range").slider("option", "values", [minValue, maxValue]);
        }
    });

    $(".amount").val("$" + minValue + " - $" + maxValue);
}

$(function () {
    initSliders();
});

因为,我不确定您是否希望我添加一个有效的 fiddle