2010-06-29 6 views
23

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

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

Подробнее: События, которые я говорю о являются те, что перечислены в their api и на their demo page:

  • выбран
  • выбирающий
  • старт
  • остановка
  • невыбранные
  • unselecting

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

ответ

25

Вот вариант кода 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); 
} 

Update:

jQueryUI 1,10, в комментарии от КМК: http://jsfiddle.net/XYJEN/163/

+0

Cool. Наверное, не связано, но почему не Ctrl + Нажмите, чтобы выбрать более одной работы в этом примере? Это что-то с jsfiddle? – Svish

+1

Да, я тоже это заметил. После тестирования это выглядит как проблема jQueryUI 1.8.16. После предоставления jsFiddle ссылки на 1.8.17, Ctrl + Click работает. Я обновил этот пример. – Homer

+0

Отлично. Благодаря! – Svish

2

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

Так что, да это возможно выделение объекта соответствует классу UI-выбранному, так что вы можете сделать, это:

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

    ....... 

}); 
+2

Это ISN Правильно ли ... Есть много событий на заднем плане, что это не срабатывает, а не t o указать правильность его данных. –

+0

Эй, можете ли вы быть более конкретным о событиях в basckground? Помимо анимации, я не уверен, что узнаю о них. Спасибо за ваш вклад, я знаю, что мои незавершенные время от времени, но вы держите нас «основными пользователями» от слишком много дерьма;) –

+0

Я обновил вопрос с информацией об этих событиях :) – Svish

0

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

+0

Хм, я полагаю, но тогда я, конечно, пропустил бы все остальные события. Кроме того, запускает ли это событие все, что делает jquery-ui? Я имею в виду, я думал, что jquery-ui сделал то, что было необходимо (маркировка классами и все такое, а затем инициирование этого события. Я хочу сказать, что он делает все, что обычно делает, когда пользователь выбирает некоторые элементы, без меня выяснить, что именно происходит со всеми этими шагами. – Svish

+0

Я пробовал этот путь: '$ (« # selectable li: first »). trigger ('selected')' на своей демонстрационной странице и ничего не делает :( –

0

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

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

?

+0

Нет, не работает. Попробуйте открыть консоль firebug на демо-странице и вставьте туда этот код. :) –

4

Там вы идти:

,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 в selectable.js, а затем вы можете сказать :

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

... или что-то вам нравится.

У fun! :)

14

Предполагая, выбираемый образец на сайте JQuery UI (http://jqueryui.com/demos/selectable/):

<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)")); 

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

+7

вызов selectableContainer.selectable ('refresh') перед вызовом _mouseStop (null), или вы можете встретить «selectee undefined» или «selectee undefined», e is undefined ". – deerchao

+0

Спасибо, работает как чемпион. –

+0

Ошибка, которую я получал без исправления @ deerchao, была' Uncaught TypeError: Невозможно прочитать свойство '$ element' undefined'. Было бы неплохо получить ответ обновлено. – pdenya