2
我有一個切換事件用於顯示和隱藏div,它被連接到骨幹視圖內並通過事件代理調用。在第一次點擊鏈接時,toggle()被跳過。在第二個和第三個點擊toggle()按預期調用。第一次點擊跳過骨幹視圖中的jquery事件
任何想法如何讓第一次點擊工作的切換事件?
我有一個切換事件用於顯示和隱藏div,它被連接到骨幹視圖內並通過事件代理調用。在第一次點擊鏈接時,toggle()被跳過。在第二個和第三個點擊toggle()按預期調用。第一次點擊跳過骨幹視圖中的jquery事件
任何想法如何讓第一次點擊工作的切換事件?
jQuery的切換結合所以第一次你點擊它用於處理切換的情況下獲取綁定,但因爲它是沒有約束,沒有任何反應不會被觸發的點擊觸發的行爲,這就是爲什麼它的工作原理在第二次點擊。這裏的另一個問題是,現在每次你點擊你一次又一次地綁定事件,這會隨着時間的推移多次觸發事件,並且它可以產生所有不同類型的難以跟蹤錯誤,性能將受到影響。
要解決您需要在呈現模板或創建幫助程序方法bindToggle
或類似的東西之後綁定呈現方法中的切換事件並在呈現模板之後從render方法調用它。
編輯:和一些技巧
html
的等效它會空然後追加你的HTML/DOM節點$(event.target)
$(this.el)
通過訪問this.$el
this.$
方法( this.$('a.docSectionHeading')
),因爲它會更有效,因爲這將只在當前元素的子元素中搜索元素。此外,它還允許您查詢尚未添加到文檔DOM樹中的元素。ps。並希望bindAll中的**"Expand"**
只是一個錯誤?什麼是明星?
固定碼:
initialize: function(options) {
_.bindAll(this, "render");
this.model.bind("change", this.render);
this.model.fetch();
},
render: function() {
var $el = $(this.el);
$el.empty();
$el.append(this.template.to_html({
message: this.model.get("message")
}));
this.bindExpand();
return this;
},
bindExpand: function() {
var tempid = "",
id = "";
this.$("a.docSectionHeading").toggle(
function() {
tempid = $(this).attr("data-id");
id = tempid.replace(".", "\\.");
// show -, hide +
$("img#doc_minus_" + id).removeClass(".noShow");
$("img#doc_minus_" + id).show();
$("img#doc_plus_" + id).hide();
// show clicked section.
$("#" + id).show();
},
function(){
tempid = $(this).attr("data-id");
id = tempid.replace(".", "\\.");
// show -, hide +
$("img#doc_minus_" + id).addClass(".noShow");
$("img#doc_minus_" + id).hide();
$("img#doc_plus_" + id).show();
// show clicked section.
$("#" + id).hide();
}
);
}
任何機會,它已經展開,首先點擊,它只是好像它沒有做任何事情? – Malk 2012-02-18 00:35:06
我以前見過這個;不記得細節,但使用live()而不是bind()修復它。我認爲在某個地方有一次性的處理程序取消了第一個事件。 – eric 2012-02-18 00:50:38
Adam,切換不會在第一次點擊時被調用,因此它沒有被擴展。 – Asmussen 2012-02-18 03:26:25