Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery ui 使用空格键切换禁用jQuery UI Accordion_Jquery Ui_Jquery Plugins_Jquery Ui Accordion - Fatal编程技术网

Jquery ui 使用空格键切换禁用jQuery UI Accordion

Jquery ui 使用空格键切换禁用jQuery UI Accordion,jquery-ui,jquery-plugins,jquery-ui-accordion,Jquery Ui,Jquery Plugins,Jquery Ui Accordion,我看到在jQueryUI中,您可以使用空格键切换活动标题。如何才能禁用此功能?我不希望用户使用键盘与手风琴进行交互。我找到了一个可行的解决方案,但我不确定其后果 在jquery.ui.accordion.js中: _keydown: function( event ) { if ( this.options.disabled || event.altKey || event.ctrlKey ) { return; } var keyCode = $.ui

我看到在jQueryUI中,您可以使用空格键切换活动标题。如何才能禁用此功能?我不希望用户使用键盘与手风琴进行交互。

我找到了一个可行的解决方案,但我不确定其后果

在jquery.ui.accordion.js中:

_keydown: function( event ) {
    if ( this.options.disabled || event.altKey || event.ctrlKey ) {
        return;
    }

    var keyCode = $.ui.keyCode,
        length = this.headers.length,
        currentIndex = this.headers.index( event.target ),
        toFocus = false;

    switch ( event.keyCode ) {
        case keyCode.RIGHT:
        case keyCode.DOWN:
            toFocus = this.headers[ ( currentIndex + 1 ) % length ];
            break;
        case keyCode.LEFT:
        case keyCode.UP:
            toFocus = this.headers[ ( currentIndex - 1 + length ) % length ];
            break;
        case keyCode.SPACE:
        case keyCode.ENTER:
            this._clickHandler( { target: event.target }, event.target );
            event.preventDefault();
    }

    if ( toFocus ) {
        $( event.target ).attr( "tabIndex", -1 );
        $( toFocus ).attr( "tabIndex", 0 );
        toFocus.focus();
        return false;
    }

    return true;
},
请注意从空间到进入的“穿过”。我添加了一个中断:

_keydown: function( event ) {
    if ( this.options.disabled || event.altKey || event.ctrlKey ) {
        return;
    }

    var keyCode = $.ui.keyCode,
        length = this.headers.length,
        currentIndex = this.headers.index( event.target ),
        toFocus = false;

    switch ( event.keyCode ) {
        case keyCode.RIGHT:
        case keyCode.DOWN:
            toFocus = this.headers[ ( currentIndex + 1 ) % length ];
            break;
        case keyCode.LEFT:
        case keyCode.UP:
            toFocus = this.headers[ ( currentIndex - 1 + length ) % length ];
            break;
        case keyCode.SPACE:
            break;
        case keyCode.ENTER:
            this._clickHandler( { target: event.target }, event.target );
            event.preventDefault();
    }

    if ( toFocus ) {
        $( event.target ).attr( "tabIndex", -1 );
        $( toFocus ).attr( "tabIndex", 0 );
        toFocus.focus();
        return false;
    }

    return true;
},
按“回车”键仍会出现关闭行为,因此如果需要,也可以随意在此处中断。我认为问题出在你身上

this._clickHandler( { target: event.target }, event.target );
但我在第一次通读时没有看到。这个编辑适合我

如果你根本不需要“\u keydown”功能,我想你可以删除它

delete($.ui.accordion.prototype._keydown);
如果要更改或覆盖“\u keydown”函数的功能 如果不想将其破解到原始文件中,您可以这样做:

$.ui.accordion.prototype._keydown = function( event ) {
    // your new code for the "_keydown" function
};

希望这有帮助

我开发了一个仅启用空格键的答案,但它可以扩展到其他要覆盖的按键事件

/*
 * Detect spacebar and return immediately, otherwise call standard behaviour
 * The 'solution' of deleting the event handler caused other errors
 * http://stackoverflow.com/a/7008791
*/
$.ui.accordion.prototype._originalKeyDown = $.ui.accordion.prototype._keydown;
$.ui.accordion.prototype._keydown = function( event ) {
    var keyCode = $.ui.keyCode;

    if (event.keyCode == keyCode.SPACE) {
        return;
    }
    // call the original method
    this._originalKeyDown(event);
};

超驰控制工作正常。您不想完全删除keydown,因为uicode仍然会触发并抛出错误。简单的“return;”从_keydown函数到bypass我正在处理一个类似的问题(accordion标题的内联编辑-空格键行为异常)-我发现在JqueryUI的更新版本中,click handler方法已被删除并替换为:this._eventHandler(event);