2016-07-22 4 views
1

У меня есть текстовое поле и кнопка. Либо при нажатии кнопки или введите, то функция должна быть выполнена.Объединить несколько событий

Предназначен для подходов. Однако можно ли объединить эти 2 функции (click и keypress), так что у меня есть только 1?

$("button").click(function() { 
    getInput(); 
}); 

$("#name").keypress(function(e) { 
    if (e.which == 13) { 
    getInput(); 
    } 
}); 

function getInput() { 
    alert($("#name").val()) 
} 

Поэтому мне нужно просто добавить эти события.

Here is a fiddle.

+0

Не на самом деле - вы уже сделало фактическую работу отдельной функцией, поэтому нет дублированного кода. Проблема в том, что обработчик для кликов и нажатия клавиш очень отличается, поэтому вы в конечном итоге проверяете, есть ли у вас нажатие клавиши, чтобы проверить, какой ключ. Вы можете немного улучшить с помощью '$ (« кнопка »). Click (getInput)' ;. –

ответ

1

Вы можете прослушивать несколько событий с помощью .on('listOfEvents')

Для того, чтобы проверить, когда вам нужно запустить функцию, вам понадобятся дополнительные правила.

$("button, #name").on('click keypress', function(e) { 
 
    if ($(e.currentTarget).attr('id') == 'submit' || e.which == 13) { 
 
\t \t getInput(); 
 
    } 
 
}); 
 

 
function getInput() { 
 
    alert($("#name").val()) 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input type="text" id="name" /> 
 
<button id="submit"> 
 
    OK 
 
</button>

+0

Я спрашиваю об этом из любопытства, $ («button, #name») .on («click keypress») будет привязывать нажатие кнопки к кнопке? И нажимать на текстовое поле? Не считаете ли вы, что события добавляются излишне – Kira

+0

@Kira Да, но это запрос OP – Justinas

1

function getInput(){ 
 
    return $(".result").text($("input").val()); 
 
} 
 

 
$("form").on("submit", (ev)=>{ 
 
    ev.preventDefault(); 
 
    // handle submission 
 
    getInput(); 
 
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<form action=""> 
 
    <input type="text" /> 
 
    <button>ok</button> 
 
</form> 
 
<div class="result"></div>

вы можете обернуть ввода и кнопку в форме и прослушайте представить события в этой форме. Формы могут быть представлены, нажав ввести во входе внутри них или нажав на кнопку, которая заключена

HTML

<form action=""> 
    <input type="text" /> 
    <button>ok</button> 
</form> 

Javascript

$("form").on("submit", (ev)=>{ 
    ev.preventDefault(); 
    // handle submission 
    getInput(); 
}) 
1

@eltonkamami ответ одна идея и моя идея состоит в том, чтобы обеспечить такой же класс как для поля и кнопки ввода, как это:

(Но, это будет вызывать всякий раз, когда входное поле изменено)

$(".same").bind("click keypress", function() { 
 
    getInput(); 
 
}); 
 

 
function getInput() { 
 
    console.log($("#name").val()) 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input type="text" id="name" class="same" /> 
 
<button id="submit" class="same"> 
 
    OK 
 
</button>

Hop е это помогает :)

+0

Это интересная идея, но она не обнаруживает событие ввода. – user1170330

+0

@ user1170330 Введите событие, которое работает для меня – Thinker

+0

Да, каждый ключ запускает эту функцию. Но вы никогда не проверяете явно клавишу ввода. Что-то вроде 'if (e.which == 13)'. – user1170330

0
$("button,#name").on("click keypress",function(e) { 
    //alert($(e.currentTarget).html()); 
    if (e.which == 13) { 
    getInput(); 
    }else if(event.type == 'click'){ 
    getInput(); 
    } 
}); 

function getInput() { 
    alert($("#name").val()) 
} 
+0

вы можете объяснить, что вы сделали точно – depperm

0

Мы можем дифференцировать щелчок и нажатие на e.key или e.type параметров

Попробуйте это,

var getInput = function(e) {  
 
    if((e.which & e.which==13) || !e.key) 
 
    //e.key is a parameter for keypress event and not for click 
 
    alert($("#name").val()) 
 
} 
 

 
$("button").click(getInput); 
 

 
$("#name").keypress(getInput);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.1/jquery.min.js"></script> 
 
<input type="text" id="name" class="same" /> 
 
<button id="submit" class="same"> 
 
Click 
 
</button>

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