2011-09-23 97 views
3

我正在開發我的第一個jQuery插件,但希望它以與平常稍有不同的方式工作。我將首先解釋它的用途:檢測是否已指定選擇器

非常簡單,<輸入>具有指定標題屬性的字段將填充輸入框中的屬性值,重點是輸入字段將刪除值並允許用戶鍵入框中。

我知道這不是新東西,可能以前做過100次,但它比最終結果更多的是學習曲線。

於是,我知道了在兩個方面,到目前爲止的工作,第一種方法是代碼被稱爲在一個特定的元素:

$('input').fillForm(); 

另一種方法包括使用插件內的選擇(被指定爲一個選項),它會發現頁面上的所有元素與特定的類和運行函數:

$().fillForm(); // Called from the document load 

$('.fillForm').each(function() {... // Within the plugin 

我的問題是,有沒有一種方法來檢測用戶是否不符合規定選擇:$('input').fillFo R M();該位以粗體突出顯示。

這樣,如果他們沒有,那麼我可以告訴它使用默認的CSS選擇器。

這裏是我的代碼小提琴:http://jsfiddle.net/chricholson/HwkRw/

有兩個版本存在,周圍交換意見,嘗試另一種方法。

+0

通常,在沒有選擇器的情況下調用的插件以'$ .fillForm'格式運行。 –

回答

1

我不知道究竟是你追求什麼,而是你可以訪問選擇的構造jQuery對象的財產這樣的:

console.log($("input").selector); // "input" 

從你的插件中,您可以這樣做:

$.fn.myPlugin = function() { 
    console.log(this.selector); 
} 

$("p").myPlugin(); // "p" 
+0

我設法得到了一些工作:http://jsfiddle.net/chricholson/HwkRw/7/因此,正確的答案,因爲這開始了它,但是,我會問更多的其他意見。 – Chris

+0

'.selector'屬性沒有記錄,我們建議_not_在任何用戶級代碼中使用它,請參閱此處的討論:http://bugs.jquery.com/ticket/6754以及重複項 – Rick

0

jQuery對象有一個.selector屬性,您可以使用。下面是一個例子,http://jsfiddle.net/Akkuma/CGFpC/

如果你創建一個空的jQuery對象$().selector;將等於一個空字符串。如果你決定把它變成一個jQuery UI Widget,你不能從this.element.selector簡單地訪問它。

0

一個也許是更好的方法是什麼,你正在嘗試做的:有一個默認設置,並在需要時將其覆蓋:這裏

(function ($) { 
    $.fillForm = function (args) { 

     options = { 
      selector : '.fillForm' 
     } 

     $.extend(options, args); 

     alert(options.selector); 

     $(options.selector).each(function() { 
      var input = $(this); 

      input.val(input.attr('title')); 

      input.focus(function() { 
       if (input.val() == input.attr('title')) { 
        input.val(''); 
       } else { 
        setTimeout(function() { input.select(); }, 10); 
       } 
      }); 

      input.blur(function() { 
       if (input.val() == "") { 
        input.val(input.attr('title')); 
       } 
      }); 
     }); 

    }; 
})(jQuery); 

$(document).ready(function() { 

    $.fillForm({'selector' : '.foo'}); 

}); 

工作例如:http://jsfiddle.net/82t3K/

+0

如果我決定指定選擇器,這是否覆蓋** $(options.selector)**? – Chris

+0

邑,它的確如此。看小提琴http://jsfiddle.net/82t3K/。 $ .extend(foo,bar)的基本功能是將foo和bar對象組合起來,用foo中的屬性覆蓋foo中存在的任何屬性。 看看這裏,太棒了! http://api.jquery.com/jQuery.extend/ – vzwick

+0

你的'選項'var被泄漏到全球。 – Rick

0

jQuery對象的創建方法(而不是在fn命名空間中),可以在沒有選擇器的情況下調用它。現在

(function($) { 
    var defaultSelector = '.fillForm'; 

    // Use fillForm with your own selector. 
    $.fn.fillForm = function() { 
     // Blah blah blah. 
    }; 

    // Use fillForm with the default selector. 
    $.fillForm = function() { 
     $(defaultSelector).fillForm(); 
    }; 
})(jQuery); 

可以調用帶$.fillForm()你的插件,它是一種較爲常見的模式。

0

爲什麼不使用標準"placeholder"屬性並編寫使用它的回退?或者更好的是,使用已經編寫的許多回退之一?到目前爲止發佈的每個答案都給出了不同程度的非常糟糕的建議

對於您的任務,我建議使用由Mike Taylor(來自Opera)編寫的html佔位符備份:jQuery-html5-placeholder。或者至少,用他的作品激勵你自己。