Javascript onselectstart не должен вызывать событие click [duplicate]

Это потому, что метод Scanner.nextInt не использует символ последней новой строки вашего ввода и, следовательно, newline потребляется в следующий вызов Scanner.nextLine .

Вы столкнетесь с аналогичным поведением, когда вы используете Scanner.nextLine после Scanner.next() или любого метода Scanner.nextFoo (кроме самого nextLine).

Обход проблемы:

  • Пропустить пустой Scanner.nextLine вызов после Scanner.nextInt или Scanner.nextFoo, чтобы потреблять остальную часть этой линии, включая newline
    int option = input.nextInt();
    input.nextLine();  // Consume newline left-over
    String str1 = input.nextLine();
    
  • Или было бы еще лучше, если вы прочитаете ввод через Scanner.nextLine и преобразуете свой ввод в нужный формат. Например, к целому числу с использованием метода Integer.parseInt(String) .
    int option = 0;
    try {
        option = Integer.parseInt(input.nextLine());
    } catch (NumberFormatException e) {
        e.printStackTrace();
    }
    String str1 = input.nextLine();
    

11
задан PatrikJ 13 August 2015 в 07:47
поделиться

4 ответа

Один из вариантов - проверить type объекта Selection, возвращенного window.getSelection:

function toggleInfo() {
    var selection = window.getSelection();
    if(selection.type != "Range") {
        $("#clicktoshow").toggle();
        $("#information").toggle();
    }
}

http://jsfiddle.net/k61u66ek/4/

Обновить

Если браузер, на который настроен таргетинг, не предоставляет свойство type для объекта Selection, то вы можете протестировать его по длине выбранного вместо этого:

function toggleInfo() {
    var selection = window.getSelection();
    if(selection.toString().length === 0) {
        $("#clicktoshow").toggle();
        $("#information").toggle();
    }
}

http://jsfiddle.net/k61u66ek/9/

, который, в свою очередь, может быть уменьшен до проверки bool на toString:

if(!selection.toString()) {

http://jsfiddle.net/k61u66ek/10/

21
ответ дан Jamie Dixon 4 September 2018 в 08:36
поделиться

Вы можете проверить, есть ли выбор в обработчике событий click:

window.getSelection().toString();
2
ответ дан BobbyTables 4 September 2018 в 08:36
поделиться

Вы можете использовать mouseup, mousedown и mousemove события для достижения этого:

DEMO

var isDragging = false;
$("#clickshow")
.mousedown(function() {
    isDragging = false;
})
.mousemove(function() {
    isDragging = true;
 })
.mouseup(function() {
    var wasDragging = isDragging;
    isDragging = false;
    if (!wasDragging) {
        $("#information").toggle();
        $("#clicktoshow").toggle();
    }
});

ИСТОЧНИК

1
ответ дан Community 4 September 2018 в 08:36
поделиться

Вы можете проверить, отключен ли «информационный» div:

function toggleInfo() {
    if(document.getElementById('information').style.display == 'none'){
         $("#clicktoshow").toggle();
         $("#information").toggle();
   } else { 
       // do nothing
   }
}

Проверьте это Fiddle

1
ответ дан wilson 4 September 2018 в 08:36
поделиться
Другие вопросы по тегам:

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