重新单击输入字段时,jQuery Datepicker挂起(Chrome)

时间:2013-06-27 20:37:16

标签: javascript jquery jquery-ui jquery-ui-datepicker

我有这个jsFiddle:http://jsfiddle.net/VebTY/

看起来这只是chrome中的一个问题。

当您单击页面中的某个项目时,它会添加一个文本字段,然后会弹出日期选择器。当您单击文本框然后返回文本框时,浏览器将挂起5-10秒。为什么要这样做,我该如何解决?

以下是我的相关代码:

$(document).on("focus", "td input[type=text]", function(e) {
    e.stopPropagation();
    if ($(this).closest("td").attr("data-type") === "date") {
        var dt = $(this).val();
        $(this).not(".hasDatePicker").datepicker();
        $(this).datepicker("setDate", dt);
    }
});


$(".editable").click(function(e) {
    if (!$(e.target).is('input, textarea')) {
        $(".editable").each(function() {
            if ($(this).has("input")) {
                var v = $(this).children("input.input, textarea").attr("data-orig");
                $(this).text(v);
            }
        });

        var type = $(this).attr("data-type");
        var val = $(this).text();

        if (type === "text" || type === "date") {
            str = '<input type="text" data-orig="' + val + '" onfocus="this.value = this.value;" class="input" style="width: 100%;" value="' + val + '" /><br />';
        } else if (type === "textarea") {
            str = '<textarea class="input" data-orig="' + val + '" onfocus="this.value = this.value;" style="width: 100%;">' + val + '</textarea><br />';
        }
        str += '<input type="button" class="save-edit" value="Save" />';
        str += '<input type="button" class="cancel-edit" value="Cancel" />';

        $(this).html(str);
        $(this).find("input[type=text], textarea").focus();
    }
});

1 个答案:

答案 0 :(得分:2)

你在这里创造一个无限循环。

问题的原因在第7行:

$(this).datepicker("setDate", dt);

它创建了一个无限循环,其中您的焦点事件被触发,直到一切崩溃

我会试着弄清楚如何解决这个问题,很快就会用小提琴进行更新

<强>更新

发现你的问题!这是一个working fiddle

问题是由这一行引起的:

$(this).not(".hasDatePicker").datepicker();

班级名称为hasDatepicker而不是hasDatePicker。这是一个棘手的问题:D