jQuery“Unexpected token ILLEGAL”

时间:2013-10-17 11:07:28

标签: javascript jquery

我有两个函数,用于按类显示和隐藏元素:

if (typeof showClass != 'function') {
    function showClass(trClass, buttonId, hideMessage, showMessage) {
        var button = '#' + buttonId;
        var value = hideMessage;
        $(button).attr("value", value);
        $(button).attr("onclick", "hideClass('" + trClass + "', '" + buttonId + "', '" + showMessage + "', '" + hideMessage + ");");
        var classToShow = '.' + trClass;
        $(classToShow).css('visibility', 'visible');
    }
}

if (typeof hideClass != 'function') {
    function hideClass(trClass, buttonId, showMessage, hideMessage) {
        var button = '#' + buttonId;
        var value = showMessage;
        $(button).attr("value", value);
        $(button).attr("onclick", "showClass('" + trClass + "', '" + buttonId + "', '" + hideMessage + "', '" + showMessage + ");");
        var classToHide = '.' + trClass;
        $(classToHide).css('visibility', 'hidden');
    }
}

showClass作为例外,但hideClass在Chrome中导致错误“Unexpected token ILLEGAL”。使用FireFox我没有收到任何错误,但该功能不适用于任何一种浏览器。我尝试了不同的编辑,找到一些非法的角色等,但没有运气。可能是什么原因?

1 个答案:

答案 0 :(得分:0)

你显然试图设置一个切换按钮,但这是我见过的最令人费解的jQuery和内联事件处理程序。

试试这个:

function setupToggle(trigger, target, hideMessage, showMessage) {
    var state = false;      // true means button says "show", target is hidden
    var $el = $(trigger);

    function update() {
        $el.attr('value', state ? showMessage : hideMessage);
        $(target).css('visibility', state ? 'hidden' : 'visible');
    }

    update();  // set initial state

    $el.on('click', function() {
        state = !state;   // on click, flick state and refresh
        update();
    });
}

用法:

setupToggle('#mybutton', '.mytr', 'Hide it', 'Show it');

上述代码可能需要稍微调整,具体取决于默认状态是“隐藏”还是“显示”。