jQuery & Objects, попытка создать легкий виджет

StackOverflow https://stackoverflow.com/questions/48215

  •  09-06-2019
  •  | 
  •  

Вопрос

Пытаюсь создать общий элемент управления select, к которому я могу динамически добавлять элементы, но у меня возникают проблемы с правильной работой функций.

Это то, с чего я начал.

$select = $("<select></select>");
$select.addOption = function(value,text){
  $(this).append($("<option></option>").val(value).text(text));
};

Это работало нормально в одиночку, но в любое время $select является .clone(true)написал addOption() функция потеряна.

Это мой объектный подход, но функция все равно не работает.

function $selectX() {
  return $("<select></select>");
}

$selectX.prototype.addOption() = function(value,text){
  $(this).append($("<option></option>").val(value).text(text));
};

Решение для взлома — добавить функцию вручную после создания:

$nameSelect= new $selectX;
$nameSelect.addOption = function(value,text){
  $(this).append($("<option></option>").val(value).text(text));
};

Я лаю не на то дерево?

Это было полезно?

Решение

Чтобы добавить новый метод в jQuery, вам нужно использовать jQuery.fn.methodName атрибут, поэтому в данном случае это будет:

jQuery.fn.addOption = function (value, text) {
    jQuery(this).append(jQuery('<option></option>').val(value).text(text));
};

Но имейте в виду, что это addOption будет доступен из результата любого $() вызов.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top