2015-06-08 2 views
0

Я пытаюсь получить раскрывающееся меню для работы, поскольку большинство выпадающих меню, похоже, работают, то есть как только кнопка мыши нажата на триггере, появляется меню перетаскивания. Кажется довольно легким с некоторыми css и javascript, но это оказывается немного сложнее.Показать выпадающее меню onmousedown без потери функциональности onclick

Очевидный способ был бы это:

<script> 
    function toggle(id) { 
     var el = document.getElementById(id); 
     el.style.display = (el.style.display === 'none') ? 'inline-block' : 'none'; 
    } 
</script> 
<input type="button" value="click me" onmousedown="toggle('menu');"><div id="menu" style="display: none">Menu</div> 

К сожалению, это не совсем то, так как теперь это не более возможно, чтобы перейти к триггеру с вкладкой ключом и нажмите ввод, чтобы отобразить меню. Кажется, для этого нужно меню для отображения с onclick. Но добавив функцию toggle в onclick, также отобразите меню на onmousedown, а затем сбрасывает его, когда кнопка мыши отпущена на onclick. Есть ли способ остановить onclick от стрельбы, когда onmousedown стрелял раньше?

ответ

0

Надежда это будет работать нормально для вашего требования

<script> 
 
    var lastEvent = ''; 
 
    function toggle(id, event) { 
 
     event = event || window.event; 
 
     if (lastEvent === 'mousedown' && event.type === 'click' && event.detail > 0){ 
 
      lastEvent = event.type; 
 
      return; 
 
     } 
 
    
 
     var el = document.getElementById(id); 
 
     el.style.display = (el.style.display === 'none') ? 'inline-block' : 'none'; 
 
     lastEvent = event.type; 
 
    } 
 
</script> 
 
<input type="submit" value="click me" onmousedown="toggle('menu', event);" onclick="toggle('menu', event);"> 
 
<div id="menu" style="display: none">Menu</div>

https://jsfiddle.net/safeer/rzg7sahb/18/

+0

К сожалению, нет. Меню вообще не отображается. – Daniel

+0

Работает на Chrome, но не работает в Firefox, кажется –

+0

Спасибо. Это объясняет это. Я использую Firefox. Я бы предпочел решение, работающее во всех браузерах. – Daniel

0

попробуйте добавить OnClick событие и отправить форму, используя его имя

<input type="submit" value="click me" onmousedown="toggle('menu');" onclick="document.getElementById('form_name').submit();" >

+0

Какая форма? Это вводит в заблуждение, что я использую 'type =" submit "на моем входе? Я хочу только вызвать меню, чтобы ничего не показывать. – Daniel

+0

Если вы хотите показать меню, почему бы не использовать другой div, а не кнопку? Или попробуйте использовать ''? – Livingstone

+0

Для чего я должен изменить тип ввода на 'кнопку'. – Daniel

0

информация об этом методе?

<script> 

function toggle(id) { 
    var el = document.getElementById(id); 
    el.style.display = (el.style.display == 'none') ? 'inline-block' : 'none'; 
} 

function activate(e){ 
    alert(e.id); 
} 
</script> 
<div id="menuWrapper" onmousedown="toggle('menu');"onmouseup="toggle('menu');"> 
    <div id="mainlink" >Click Here</div> 
    <div id="menu" onmouseup="activate(this);" style="display: none">Menu</div> 
</div> 

JS fiddle with div for menu opener

+0

Нет, это также не нормальное поведение в меню, так как меню отключается при отпускании кнопки. Кроме того, насколько я вижу, нет возможности открытия меню с помощью клавиш. – Daniel

+0

О, хорошо, я думал, что вы хотели бы получить такое поведение. Сожалею. – Livingstone

+0

У вас есть простой javascript или вы бы также использовали jquery? – Livingstone

0

Вот еще один способ, который, кажется, работает:

<script> 
    function toggle(id) { 
     var el = document.getElementById(id); 
     el.style.display = (el.style.display === 'none') ? 'inline-block' : 'none'; 
    } 
</script> 
<input type="submit" value="click me" onmousedown="toggle('menu');" onkeypress="if (event.keyCode === 13) toggle('menu');" onkeyup="if (event.keyCode === 32) toggle('menu');"> 
<div id="menu" style="display: none">Menu</div> 

Он эмулирует обычный ключ поведения. Хотя я не совсем уверен, что он эмулирует все это и правильно на всех операционных системах.

Смежные вопросы