2013-04-29 27 views
1

我試圖創建一個自定義綁定來在文本輸入中顯示提示文本。如何創建一個敲除提示文本自定義綁定?

到目前爲止,我這一點,但它不工作:

ko.bindingHandlers.hintText= { 
    init: function (element, valueAccessor) { 
     element.focus(function() { 
      if ($(this).val() === defaultText) { 
       $(this).attr("value", ""); 
      } 
     }); 
     element.blur(function() { 
      if ($(this).val() === '') { 
       $(this).val(valueAccessor()); 
      } 
     }); 
    } 
} 

的HTML:

<input id="profileID" type="text" data-bind="hintText:'Enter Profile ID'" /> 
+0

你的意思是一樣的HTML'placeholder'屬性? – 2013-04-29 14:13:17

+0

是的,就像那樣,但我想創建一個自定義綁定而不是使用佔位符。 – Xerxes 2013-04-29 14:15:48

+0

請參閱http://stackoverflow.com/q/12636695/866172 – Jalayn 2013-04-29 14:17:37

回答

6

的HTML5 placeholder屬性應該做到這一點你。

如果您的瀏覽器需要支持placeholder屬性,你可以把它直接使用KnockOutJS」 attr這樣的結合:

<input data-bind="attr:{placeholder: hintText}"> 

如果您需要舊版瀏覽器的支持,就應該爲其工作,墊片您:https://github.com/parndt/jquery-html5-placeholder-shim

爲了使用此墊片,您需要創建自定義綁定,以便在佔位符更改時根據需要手動調用$.placeholder.shim();

這裏有一個 「佔位符」 綁定應用墊片(編輯):

ko.bindingHandlers.placeholder = { 
    init: function (element, valueAccessor) { 
     var placeholderValue = valueAccessor(); 
     ko.applyBindingsToNode(element, { attr: { placeholder: placeholderValue} }); 
    }, 
    update: function(element, valueAccessor){ 
     $.placeholder.shim(); 
    } 
}; 

你的HTML則是這樣的:

<input data-bind="placeholder: hintText">