<script>
(function( $ ) {
$.widget( "my.dropbox", {
errorText: function(text) {
$(this.element).next().html(text);
},
_create: function() {
var id = $(this.element).attr("id");
var customDropbox = $(
"<div class='form-group'>"+
"<label for='"+id+"'>"+getLabelFor(id)+"</label>"+
"<select id='"+id+"'></select>"+
"<div class='errors'></div>"+
"</div>"
);
customDropbox.attr("id", id);
$(this.element).replaceWith(customDropbox); // This removes original element from DOM
populateOptions(id);
},
});
}( jQuery ));
$(document).ready(function(){
$("#field1").dropbox(); //blank input field turns into a select with a label, populated options e.t.c..
$("#button1").on("click", function(){
$("#field1").dropbox("errorText", "This is a validation error message"); //throws an error saying dropbox is not initialized
});
});
</script>
<html>
<body>
<input id="field1" />
<button id="button1">Press me</button>
</body>
</html>
Поэтому я хочу, чтобы виджет с общедоступными методами заменил исходный элемент всеми связанными с ним данными виджетов. Проблема с приведенным выше кодом заключается в том, что элемент <select..>
является всего лишь элементом DOM, и если вы вызываете .dropbox(..)
на нем, он скажет, что виджет не инициализирован. Есть ли способ сделать элемент select в объекте виджета с помощью метода .errorText()? Все примеры виджета онлайн добавляют материал вокруг исходного элемента, но не заменяют его. Что касается большей картины, я пытаюсь создать универсальный инструмент для динамического конфигурирования форм. Это будет все <input id="...">
в html, но затем javascript будет запрашивать базу данных, получить конфигурацию для поля и превратить ее в dropbox
, checkbox
или, скажем, a date picker
со всеми labels
, validation
, и другие звонки и свистки.