2013-03-08 3 views
0

У меня есть несколько div и я показываю TextBox при щелчке. TextBox копируется из другого div. Он работает нормально, но когда я сосредоточен на TextBox, он исчезает. Что я делаю не так?JQuery - Текстовое поле скрывается в фокусе

JSFIDDLE

HTML

<table> 
     <tr> 
      <td> 
       <div class="panel_call"> 
        Call 1 
        <div class="panel_authenticate_container" style="display: none"> 
        </div> 
       </div> 
      </td> 
     </tr> 
     <tr> 
      <td> 
       <div class="panel_call"> 
        Call 2 
        <div class="panel_authenticate_container" style="display: none"> 
        </div> 
       </div> 
      </td> 
     </tr> 
    </table> 
    <div class="panel_authenticate" style="display: none;"> 
     Email: 
     <input id="Text1" type="text" /> 
    </div> 

Jquery

$(".panel_call").click(function(e) { 
      if ($(e.target).closest("tr").find(".panel_authenticate_container").is(":visible")) { 
       var c = $(e.target).closest("tr").find(".panel_authenticate_container").html(); 
       $(".panel_authenticate").html(c); 
       $(e.target).closest("tr").find(".panel_authenticate_container").html(""); 
       $(e.target).closest("tr").find(".panel_authenticate_container").hide(); 
      } 
      else { 
       if ($(".panel_authenticate_container:visible").length > 0) { 
        var b = $(".panel_authenticate_container:visible").html(); 
        $(".panel_authenticate").html(b); 
        $(".panel_authenticate_container:visible").html(""); 
        $(".panel_authenticate_container:visible").hide(); 
       } 
       var a = $(".panel_authenticate").html(); 
       $(e.target).closest("tr").find(".panel_authenticate_container").html(a); 
       $(e.target).closest("tr").find(".panel_authenticate_container").show(); 
       $(".panel_authenticate").html(""); 
       $(".panel_authenticate").hide(); 
      } 
     }); 

ответ

2

проверки, была ли нажата входной и ничего не делать, если он был

JSFiddle

добавить следующие строки в обработчик щелчка

if ($(e.target).is(":input")) 
    return; 

так что все будет выглядеть, как этот

$(".panel_call").click(function(e) { 
if ($(e.target).is(":input")) 
    return; 
if ($(e.target).closest("tr").find(".panel_authenticate_container").is(":visible")) { 
    var c = $(e.target).closest("tr").find(".panel_authenticate_container").html(); 
    $(".panel_authenticate").html(c); 
    $(e.target).closest("tr").find(".panel_authenticate_container").html(""); 
    $(e.target).closest("tr").find(".panel_authenticate_container").hide(); 
} 
else { 
    if ($(".panel_authenticate_container:visible").length > 0) { 
     var b = $(".panel_authenticate_container:visible").html(); 
     $(".panel_authenticate").html(b); 
     $(".panel_authenticate_container:visible").html(""); 
     $(".panel_authenticate_container:visible").hide(); 
    } 
    var a = $(".panel_authenticate").html(); 
    $(e.target).closest("tr").find(".panel_authenticate_container").html(a); 
    $(e.target).closest("tr").find(".panel_authenticate_container").show(); 
    $(".panel_authenticate").html(""); 
    $(".panel_authenticate").hide(); 
} 
}); 

предотвратить обработчик щелчка от выполнения для чего на панели, которая содержит текстовое поле добавить следующую проверку

if ($(e.target).is(".panel_authenticate_container *, .panel_authenticate_container")) 
    return; 

все это выглядит как это

$(".panel_call").click(function(e) { 
if ($(e.target).is(".panel_authenticate_container *, .panel_authenticate_container")) 
    return; 
if ($(e.target).closest("tr").find(".panel_authenticate_container").is(":visible")) { 
    var c = $(e.target).closest("tr").find(".panel_authenticate_container").html(); 
    $(".panel_authenticate").html(c); 
    $(e.target).closest("tr").find(".panel_authenticate_container").html(""); 
    $(e.target).closest("tr").find(".panel_authenticate_container").hide(); 
} 
else { 
    if ($(".panel_authenticate_container:visible").length > 0) { 
     var b = $(".panel_authenticate_container:visible").html(); 
     $(".panel_authenticate").html(b); 
     $(".panel_authenticate_container:visible").html(""); 
     $(".panel_authenticate_container:visible").hide(); 
    } 
    var a = $(".panel_authenticate").html(); 
    $(e.target).closest("tr").find(".panel_authenticate_container").html(a); 
    $(e.target).closest("tr").find(".panel_authenticate_container").show(); 
    $(".panel_authenticate").html(""); 
    $(".panel_authenticate").hide(); 
} 
}); 

JSFiddle

+0

это работает нормально, но вместо 'if ($ (e.target) .is (": input "))' могу ли я это сделать, если '($ (e .TARGET). ("panel_authenticate_container")) '? – enb081

+0

Как я могу сделать это для panel_authenticate_container и всех элементов внутри него? – enb081

+0

Удивительный! Благодаря! Если вам нравится, вы можете обновить ответ так, чтобы он был более общим и полезным для других, потому что это то, что я искал – enb081

1

Эти две строки вызывают исчезновение.

$(e.target).closest("tr").find(".panel_authenticate_container").html(""); 
$(e.target).closest("tr").find(".panel_authenticate_container").hide(); 

прокомментируйте их, и он должен работать должным образом.

$(".panel_call").click(function(e) { 
     if ($(e.target).closest("tr").find(".panel_authenticate_container").is(":visible")) { 
      var c = $(e.target).closest("tr").find(".panel_authenticate_container").html(); 
      $(".panel_authenticate").html(c); 
      //$(e.target).closest("tr").find(".panel_authenticate_container").html(""); 
      //$(e.target).closest("tr").find(".panel_authenticate_container").hide(); 
     } 
     else { 
      if ($(".panel_authenticate_container:visible").length > 0) { 
       var b = $(".panel_authenticate_container:visible").html(); 
       $(".panel_authenticate").html(b); 
       $(".panel_authenticate_container:visible").html(""); 
       $(".panel_authenticate_container:visible").hide(); 
      } 
      var a = $(".panel_authenticate").html(); 
      $(e.target).closest("tr").find(".panel_authenticate_container").html(a); 
      $(e.target).closest("tr").find(".panel_authenticate_container").show(); 
      $(".panel_authenticate").html(""); 
      $(".panel_authenticate").hide(); 
     } 
    }); 
+0

Bu t, если div виден, мне нужно скрыть его при нажатии! – enb081

+0

Я понимаю, что вы имеете в виду, что проблема в том, что щелчок по этому входному тегу (для вставки значения) считается нажатием на «.panel_call». Я все еще думаю о работе! – devBinnooh

+0

Он скрывает эти входы при нажатии на другую панель? Вы хотите скрыть ввод, если они снова нажали на элемент div? – devBinnooh

1

Попробуйте этот код ..

$(".panel_call").click(function (e) { 
    if ($(e.target).closest("tr").find(".panel_authenticate_container").is(":visible")) { 
     var c = $(e.target).closest("tr").find(".panel_authenticate_container").html(); 
     $(".panel_authenticate").html(c); 

     if (e.target.nodeName == "DIV") { 
      $(e.target).closest("tr").find(".panel_authenticate_container").hide(); 
     } 
    } else { 
     if ($(".panel_authenticate_container:visible").length > 0) { 
      var b = $(".panel_authenticate_container:visible").html(); 
      $(".panel_authenticate").html(b); 
      $(".panel_authenticate_container:visible").html(""); 
      $(".panel_authenticate_container:visible").hide(); 
     } 
     var a = $(".panel_authenticate").html(); 
     $(e.target).closest("tr").find(".panel_authenticate_container").html(a); 
     $(e.target).closest("tr").find(".panel_authenticate_container").show(); 
     $(".panel_authenticate").html(""); 
     $(".panel_authenticate").hide(); 
    } 
}); 
+0

Спасибо, но 1. Если я нажму на div, это должен быть единственный «открытый» и 2. Если я нажму на div и он открыт, он должен закрыть. – enb081

1

Я думаю, что это будет работать нормально. изменить эту строку

var c = $(e.target).closest("tr").find(".panel_authenticate_container").html(); 
$(".panel_authenticate").html(c); 

в

var c = $(e.target).closest("tr").find(".panel_authenticate_container").html(); 
$(".panel_authenticate").html(c.clone().html()); 
c.remove(); 
+0

Спасибо, но если открывается «Call 1», он должен закрыться при щелчке. http://jsfiddle.net/PpbWw/2/ – enb081

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