Как программно выбрать селектируемые объекты с помощью jQuery UI? - PullRequest
25 голосов
/ 29 июня 2010

У меня есть ряд предметов, которые можно выбрать. Я хотел бы добавить кнопку где-нибудь, что активирует выбор пресетов среди тех. Есть ли способ, которым я могу это сделать?

Я хотел бы сказать ему «Выбрать этих парней», а затем запустить все события и все как обычно, поэтому мне не нужно вызывать все эти события выбора вручную.

Дополнительная информация: События, о которых я говорю, перечислены в их API и на их демонстрационной странице :

  • выбран
  • выбирающий
  • 1018 * начать *
  • остановка
  • невыбранные
  • 1024 * Отмена выбора *

А также, я думаю, могут быть данные, которые также устанавливаются / очищаются при выборе вещей. Так что это не просто добавить эти классы CSS.

Ответы [ 6 ]

25 голосов
/ 24 февраля 2012

Вот вариант кода Alex R, работающего с несколькими элементами

http://jsfiddle.net/XYJEN/1/

function SelectSelectableElements (selectableContainer, elementsToSelect)
{
    // add unselecting class to all elements in the styleboard canvas except the ones to select
    $(".ui-selected", selectableContainer).not(elementsToSelect).removeClass("ui-selected").addClass("ui-unselecting");

    // add ui-selecting class to the elements to select
    $(elementsToSelect).not(".ui-selected").addClass("ui-selecting");

    // trigger the mouse stop event (this will select all .ui-selecting elements, and deselect all .ui-unselecting elements)
    selectableContainer.data("selectable")._mouseStop(null);
}

Обновление:

jQueryUI 1.10, за комментарии от kmk: http://jsfiddle.net/XYJEN/163/

14 голосов
/ 01 февраля 2011

Предположим, что выборка возможна на веб-сайте jQuery UI

<style>
    #feedback { font-size: 1.4em; }
    #selectable .ui-selecting { background: #FECA40; }
    #selectable .ui-selected { background: #F39814; color: white; }
    #selectable { list-style-type: none; margin: 0; padding: 0; width: 60%; }
    #selectable li { margin: 3px; padding: 0.4em; font-size: 1.4em; height: 18px; }
    </style>
    <script>
    $(function() {
        $( "#selectable" ).selectable();
    });
    </script>



<div class="demo">

<ol id="selectable">
    <li class="ui-widget-content">Item 1</li>
    <li class="ui-widget-content">Item 2</li>
    <li class="ui-widget-content">Item 3</li>
    <li class="ui-widget-content">Item 4</li>
    <li class="ui-widget-content">Item 5</li>
    <li class="ui-widget-content">Item 6</li>
    <li class="ui-widget-content">Item 7</li>
</ol>

</div><!-- End demo -->

Вы можете иметь такую ​​функцию, как:

    function selectSelectableElement (selectableContainer, elementToSelect)
    {
        // add unselecting class to all elements in the styleboard canvas except current one
        jQuery("li", selectableContainer).each(function() {
        if (this != elementToSelect[0])
            jQuery(this).removeClass("ui-selected").addClass("ui-unselecting");
        });

        // add ui-selecting class to the element to select
        elementToSelect.addClass("ui-selecting");

        selectableContainer.selectable('refresh');
        // trigger the mouse stop event (this will select all .ui-selecting elements, and deselect all .ui-unselecting elements)
        selectableContainer.data("selectable")._mouseStop(null);
    }

и используйте его как:

// select the fourth item
selectSelectableElement (jQuery("#selectable"), jQuery("#selectable").children(":eq(3)"));

Это можно улучшить, чтобы выбрать набор элементов, но это отправная точка для начала.

4 голосов
/ 13 июля 2010

Вот вам go :

,calc: function() { this._mouseStop(); },
custom: function(guys) {
  var self = this;
  self.selectees.removeClass("ui-selected");
  guys.each(function(){
    $(this).addClass("ui-selecting");
    self._trigger("selecting", {}, {
       selecting: this
    });
  });
  this.calc(); // do the selection + trigger selected
} 

Добавьте это после _mouseStop in selectable.js, и тогда вы сможете сказать :

$("#selectable").selectable("custom", $("#selectable :first-child"));

... или что угодно.

Получите удовольствия !:)

2 голосов
/ 29 июня 2010

Редактировать: Извините за недоразумение, я редактирую свой ответ.

Итак, да, возможно, выбор объекта соответствует классу ui-selected, поэтому вы можете сделать следующее:

$(#button).click(function(){
  $("#element1").addClass("ui-selected");

  .......

});
0 голосов
/ 09 июля 2010

Используя код Ionut, как насчет:

 $("#selectable li:first").trigger('start').trigger('selecting').trigger('selected'); 

?

0 голосов
/ 08 июля 2010

Невозможно вручную вызвать событие selected с помощью .trigger ('selected') ?

...