jQuery不会在点击时隐藏表单

时间:2014-06-12 21:25:09

标签: javascript jquery html css

我有三个点击事件。根据点击的内容,每个人都隐藏并显示不同的内容。除了点<form> markas以及<p>点击cancel时,所有内容都有效。

这是jQuery:

$(".cancel").on("click", function(){
    $(this).hide().parent().find('.celltext, .editlink, .marklink').show().parent().find('.editas, .markas').hide();
});
$(".editlink").on("click", function(){
    $(this).hide().parent().find('.celltext, .marklink, .markas').hide().parent().find('.editas, .cancel').show();
    $(this).parent().find(".editas input:text").focus();
});
$('.marklink').on("click", function(){
    $(this).hide().parent().find('.celltext, .editlink, .editas').hide().parent().find('.markas, .cancel').show();
    $(this).parent().find(".editas input:text").focus();
});

HTML正是您所假设的。我使用了类似的代码,其中包含.prev().next()字符串,所有内容都被隐藏并正确显示。因为我知道它不是内部HTML结构,而不是粘贴不必要的代码(我使用php函数和代码从数据库中收集信息),一般结构是这样的:

<div>
    <p class="celltext">Info from database</p>
    <p class-"editlink">Edit</p>
    <p class="marklink">Mark</p>
    <form class="markas">Form with select box to mark the cell</form>
    <form class="editas">Form with text fields to edit the info</form>
    <p class="cancel">Cancel</p>
</div>

我试图将表单单独隐藏在一个单独的行中,但这也不起作用。为什么它不隐藏?如何在点击取消时正确隐藏它?

更新 它与表单显示的顺序有关。我交换了markas和editas,现在markas隐藏和editas没有。

1 个答案:

答案 0 :(得分:1)

根据上述评论,这是解决问题的答案:

  

如果没有看到问题的实例,我就不能说了   当然,但我怀疑你收集的元素超出了你的预期   使用链式find()和parent()调用。我建议做一个   parentEl = $(this).parent(); $(本).hide();在所有的开始   你的函数,然后做parentEl.find(...)。show();和   parentEl.find(...)隐藏()。它也使您的代码更易于阅读。

$(".cancel").on("click", function(){ var parentel = $(this).parent(); $(this).hide(); parentel.find('.celltext, .editlink, .marklink').show(); parentel.find('.editas, .markas').hide(); });