2012-02-24 3 views
0

У меня есть функция showHide(), которая поочередно показывает и скрывает текстовое поле ввода и кнопку (кнопка2) при нажатии другой кнопки (кнопка1). Поле ввода текста автоматически фокусируется, когда оно открывается, и это отлично работает.проверить, нажата ли кнопка перед запуском функции на элементе.blur()

HTML, выглядит примерно так:

<button1>Show/Hide</button> 
<form> 
    <input class="hidden" type="text" /> 
    <button2 type="submit">Submit</button> 
</form> 

<script type="text/javascript"> 
    $("button1.someSelectors").click(function() {showHide();}); 
    $("input.someSelectors").blur(function() {showHide();}) 
</script> 

Я хотел бы расширить функции таким образом, что, когда поле ввода теряет фокус его и button1 исчезают, если не теряет фокус, потому что button1 идет щелкнул. Поскольку он читает сейчас, я проверяю, имеет ли поле ввода фокус или нет. Как я могу проверить, нажата ли кнопка2 или нет?

Я пробовал:

$("input.someSelectors").blur(function() { 
    if (!$("button2.someSelectors").is(":focus")) { 
    showHide(); 
    } 
}); 

но скрыли элементы формы, даже когда я пытался нажав button2.

Альтернативой было бы проверить, является ли button2 быть нажата или нет в «скрыть» часть функции, но когда я добавил

if(!$("button2.someSelectors").click()) {do the hide part of the function} 

в ПоказатьСкрыть(), форма получила представляется, когда я нажал кнопка1 или кнопка2. Вот моя проблема: example. Может ли кто-нибудь помочь?

- Edit:

var showHide=function(item, category) { 
    if($("input."+item+"."+category).hasClass("hidden")) { 
    $("input."+item+"."+category).show("fast").focus().removeClass("hidden"); 
    $("button.buy."+item+"."+category).show("fast"); 
    $("button.purchase."+item+"."+category).text("Never mind!"); 
    } else { 
    $("input."+item).hide("fast").addClass("hidden"); 
    $("button.buy."+item).hide("fast"); 
    $("button.purchase."+item).text("Purchase"); 
    } 
} 

ответ

1

blur событие на textbox срабатывает перед click пожаров событий на кнопку. Чтобы избежать этого, вы можете использовать событие mousedown вместо события click, которое будет запущено до click. Попробуйте

$("button1.someSelectors").mousedown(function() {showHide();}); 
$("input.someSelectors").blur(function() {showHide();}) 
+1

MouseDown = нажмите -> Значение Нажмите = (MouseDown на кнопку и отведении указателя мыши на кнопку и MouseUp) –

+0

Это приводит к тому, что поля формы появляются и тут же исчезают!. Возможно ли, что input.blur() тестируется до ввода.focus() применяется функцией showHide()? – Kyle

+0

Можете ли вы показать код 'ShowHide'? – ShankarSangoli

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