0

我有这个 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();
    }
});
4

1 回答 1

3

您在这里创建了一个无限循环。

问题的原因在第 7 行:

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

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

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

更新:

发现你的问题!这是一个工作小提琴

问题是由这一行引起的:

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

类名hasDatepicker不是hasDatePicker。那是一个棘手的问题:D

于 2013-06-28T13:45:44.763 回答