Обяжите событие щелкать правой кнопкой мыши

Вставьте NoKeyboardEditableText вместо вашего TextField

class NoKeyboardEditableText extends EditableText {

  NoKeyboardEditableText({
    @required TextEditingController controller,
    TextStyle style = const TextStyle(),
    Color cursorColor = Colors.black,
    bool autofocus = false,
    Color selectionColor
  }):super(
      controller: controller,
      focusNode: NoKeyboardEditableTextFocusNode(),
      style: style,
      cursorColor: cursorColor,
      autofocus: autofocus,
      selectionColor: selectionColor,
      backgroundCursorColor: Colors.black
  );

  @override
  EditableTextState createState() {
    return NoKeyboardEditableTextState();
  }

}

class NoKeyboardEditableTextState extends EditableTextState {

  @override
  Widget build(BuildContext context) {
    Widget widget = super.build(context);
    return Container(
      decoration: UnderlineTabIndicator(borderSide: BorderSide(color: Colors.blueGrey)),
      child: widget,
    );
  }

  @override
  void requestKeyboard() {
    super.requestKeyboard();
    //hide keyboard
    SystemChannels.textInput.invokeMethod('TextInput.hide');
  }
}

class NoKeyboardEditableTextFocusNode extends FocusNode {
  @override
  bool consumeKeyboardToken() {
    // prevents keyboard from showing on first focus
    return false;
  }
}
60
задан Zac 5 February 2015 в 21:48
поделиться

3 ответа

В jQuery нет никакого встроенного oncontextmenu обработчика событий, но можно сделать что-то вроде этого:

$(document).ready(function(){ 
  document.oncontextmenu = function() {return false;};

  $(document).mousedown(function(e){ 
    if( e.button == 2 ) { 
      alert('Right mouse button!'); 
      return false; 
    } 
    return true; 
  }); 
});

В основном я отменяю oncontextmenu событие элемента DOM для отключения контекстного меню браузера, и затем я получаю событие mouseDown с jQuery, и там можно знать в конечном счете аргумент, какая кнопка была нажата.

Можно попробовать вышеупомянутый пример здесь.

102
ответ дан CMS 24 November 2019 в 17:32
поделиться

contextmenu событие?

Я использовал бы onmousedown или onclick затем захватите MouseEventсвойство кнопки для определения, какая кнопка была нажата (0 = оставленный, 1 = середина, 2 = право).

0
ответ дан blasteralfred Ψ 24 November 2019 в 17:32
поделиться

Функция возвращается слишком рано. Я добавил комментарий к коду ниже:

$(document).ready(function(){
    $(document).bind("contextmenu",function(e){
        return false;
        $('.alert').fadeToggle(); // this line never gets called
    });
});

Попробуйте поменять местами return false; со следующей строкой.

48
ответ дан 24 November 2019 в 17:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: