为什么只选择性地运行jQuery函数?

时间:2011-08-22 19:00:31

标签: javascript jquery debugging

我正在尝试调试这个(不完整的)脚本,但它的行为不一致。主要问题是当我点击一个项目时,有时$(editObj).removeAttr('style');会运行,有时则不会。通过Chrome检查器,我可以看到每种情况下的editObj变量都已正确定义,但并不总是删除其内联样式属性。有时,有时不是。无法确定原因。

我的代码中有点不合适。也许有关它的事情很明显;无论我如何理解为什么会发生这种不可预测的事情,我都会感激不尽!

    var editObj = null;
    var inputType = 'text';
    var input = '#textEdit';
    var formId = '#form_undefined'

$(function() {
$("#textEdit").click(function(event) {
        event.stopPropagation();
    });

    $('body').click(function(event) {
        if (editObj){


            //textedit contents to editobj and 
            if (inputType == 'text'){
                $(editObj).text($("#textEdit").val());
            }
            $("#textEdit").removeAttr('style').hide();

            $(editObj).removeAttr('style');
            var previewId = $(editObj).attr('id');
            var formId = previewId.replace('bzm', 'form');
            $("#" + formId).val($("#textEdit").val());

            //ajax modify database
            editObj = null;
        }
    });

    $(".editable").not("video, img, textarea")
    .click(function(event) {
        event.stopPropagation();
        loadEditor($(this));
    });
});

function loadEditor(element){

    $("#textEdit")
        .copyCSS(element)
        .offset($(element).offset())
        .css("display", "block")
        .val($(element).text())
        .select();

    $(element).css("color", "transparent");

    editObj = element;
}

2 个答案:

答案 0 :(得分:1)

过去我遇到过麻烦.removeAttr('style');实际上没有删除所有内联样式。

使用

$(editObj).attr('style', '');

而不是

$(editObj).removeAttr('style');

答案 1 :(得分:0)

我看到任何初始化e editobj变量的代码..可能是我缺少安东尼..无论如何编辑obj的空存的机会是什么..只需在click函数中放置一个日志语句,以便始终记录你的editobj和看看它是否为空smtimes