渲染之后,不会重新组合带有jquery包装器的元素

时间:2015-12-29 02:17:41

标签: javascript jquery backbone.js marionette

我有一个layoutView,它存储了聚焦元素:

this.model.searchBookingTriggerElement = document.activeElement;

对layoutView进行了重新编译,我尝试触发以下内容:

onRender: function() {
    var self = this;
    _.defer(function() {
        if (self.model.searchBookingTriggerElement) {
            $(self.model.searchBookingTriggerElement).hide();
        }
    });
}

这不起作用,我无法理解,因为该元素似乎是正确的。

当我console.log(self.model.searchBookingTriggerElement);时,我得到:

<button type="submit" class="btn button item-component btn-medium btn-green">Buscar</button>

如果我直接用简单的

选择它
$("button").hide();

它按预期工作(隐藏元素),为什么jquery无法识别所选的按钮元素?

我发现的一个线索就是当我盘旋时

<button type="submit" class="btn button item-component btn-medium btn-green" style="display: none;">Buscar</button>

在develeper工具中,它不会在屏幕上绘制它,这意味着它与它无关。

这是因为它被重新渲染,现在它是,另一个对象可以这么说吗?我怎么能避免这种情况?

如果我这样做,它甚至会起作用:

$("." + $(self.model.searchBookingTriggerElement).attr("class").split(" ").join(".")).hide();

1 个答案:

答案 0 :(得分:0)

我认为评论很清楚,一旦你重新渲染,你所选择的元素就消失了。我假设你是创建布局的人,所以也许你可以为每个可以选择的元素分配一个唯一的id,所以每次你渲染你需要的只是id。

this.searchBookingTriggerElement = document.activeElement.id;

我省略了延迟,但你可以将其添加到 -

onRender: function() {
  var self = this;
  if (self.searchBookingTriggerElement) {
    $('#' + self.searchBookingTriggerElement).hide();
  }
}