我正在研究一個JQuery插件,並且在創建DOM元素和附加一個單擊事件時遇到問題。我創建的DOM元素代碼如下所示:當頁面和但是每個元素click事件觸發上呈現jQuery:插入DOM元素並附加事件
return this.each(function() {
$this = $(this);
$("<div class=\"" + settings.headingClass + "\">" + $this.attr("title") + "</div>").insertBefore($this).click(function() {
alert($this.attr("title"));
});
});
的$this.attr("title")
值是正確的,警告框始終顯示的$this.attr("title")
的價值最後的元素。
實施例:
我的插件正被施加到與標題「標題1」,「標題2」和「TITLE3」 3個元素。生成的HTML將正確顯示這些標題,但無論點擊哪個標題元素,警報框都只顯示「標題3」。
任何想法?
額外信息
我提供一些額外的信息,以幫助這一點。我正在創建一個基本的擴展器插件來嘗試使用JQuery插件開發。 HTML元素的
實施例:
<div class="MyExpander" title="Title1">
This is my expanders content
</div>
JS創建JQuery的膨脹:
$(".QuizExpander").expander({
"headingClass": "ExpanderHeading"
});
插件迄今代碼:
(function ($) {
$.fn.expander = function (options) {
var settings = {
"headingClass": "",
};
if (options) {
$.extend(settings, options);
}
return this.each(function() {
$this = $(this);
$("<div class=\"" + settings.headingClass + "\">" + $this.attr("title") + "</div>").insertBefore($this).click(function() {
alert($this.attr("title"));
});
});
};
})(jQuery的);
$ this變量缺失導致問題。所以這是全局變量的問題。說得通! – Jason 2010-09-17 17:30:42
@Jason:關於「避免字符串構建」部分:除非你處於非常高需求的循環中,這會顯着地阻止用戶界面,否則你應該更喜歡使用DOM方法(和他們的jQuery包裝器)來構建DOM對象。連接來自字符串的複雜HTML只是太簡單了。在jQuery中,它比替代選項更加醜陋。 – Tomalak 2010-09-17 17:41:28