Опция выбора полей - PullRequest
       0

Опция выбора полей

0 голосов
/ 20 октября 2011

У меня есть запрос на стороне сервера, который в общем генерирует все опции окна выбора в форме

<option val='1'> text1 </option>
<option val='2'> text2 </option>
<option val='3'> text3 </option>
<option val='4'> text4 </option>
<option val='5'> text5 </option>

Теперь я хочу преобразовать все это в формат, который jqgrid понимает из-за его выпадающих списков. то есть {1: text1, 2: text2 ....} Условие состоит в том, что я не буду касаться кода на стороне сервера. Мне нужно изменить его здесь на стороне клиента, добавив универсальную функцию. Теперь я получаю это через JQuery AJAX вызова

 getGridDropDown: function (url) {
        $.ajax({
      type: "GET",
      url: url,
      dataType: "html",
      success: function (html) {
         $(html).find('option').each(function(key){
             alert(key)
         })


      },
      error: function () {
        console.log("Error in ajax call to url:  " + url);
      }
    });
 },

Теперь я попробовал различные форматы, похоже, единственный способ использовать регулярные выражения - это единственный способ. Не могу ли я обработать html возвращаемую переменную как переменную jquery, где я могу сказать $ this.val () + this.text ()

Ответы [ 4 ]

1 голос
/ 20 октября 2011
var obj;
$('option').each(function (i,n){
   obj[i] = $(n).text();
});

console.log (obj); // выводит вашу информацию ... на вашу консоль

Я думаю, это следует сделать, но исправить селектор, чтобы у вас было #select_tag_id option

1 голос
/ 20 октября 2011

Если ваш сервер может создать список <options> внутри <select>, вы можете напрямую использовать dataUrl в editoptions или searchoptions .

Если ваш сервер может генерировать только список <options> без <select> и </select> и вы не можете изменить поведение на стороне сервера, вы можете использовать buildSelect для решения проблемы:

editoptions: {
    dataUrl: 'yourUrl',
    buildSelect: function (data) {
        return "<select>" + data + "</select>";
    }
}

(в случае использования старой версии jqGrid может потребоваться проверить typeof(data) и использовать data или data.responseText)

Использование ajaxSelectOptions: { cache: false }может также потребоваться (см. здесь )

1 голос
/ 20 октября 2011

Чтобы найти, возвращенный html нуждается в действительном корневом элементе.

Попробуйте выполнить следующее:

$("<div/>").append(data).find('option')

Пример для jsfiddle

0 голосов
/ 20 октября 2011

было тихо легко.Простой трюк сделал

getGridDropDown: function (url) {
        $.ajax({
          type: "GET",
          async:false,
          url: url,
          dataType: "json",
          success: function (html) {
             data = new String();
             $(html).each(function(key){

/ * jqgrid, выберите параметры формата * /

     data += this.value +":"+this.label+";";
             })
           gridParams['data'] = data     
          },
          error: function () {
            console.log("Error in ajax call to url:  " + url);
          }
        });
     },

Спасибо за ваши ответы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...