2013-04-29 42 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">