2013-03-13 2 views
0

У меня есть раскрывающийся список, который заполняется из базы данных mySQL с использованием PHP. Как предварительно выбрать первый вариант в раскрывающемся меню, учитывая, что эти значения могут быть не всегда одинаковыми?Предварительно выбрать первый вариант в динамически заполненном выпадающем списке

Это код в моем HTML:

function loadparameters(selobj, url, nameattr) { 
     $(selobj).empty(); 
     $.getJSON(url, {}, function (data) { 
      $.each(data, function (i, obj) { 
       $(selobj).append($("</option><option> 
       </option>").val(obj[nameattr]).html(obj[nameattr])); 
      }); 
     }); 
    } 

    $(function() { 
     loadparameters($('select#parameterType').get(0), 
     'GetParameter.php?GetParameter=parameterType', 'parameterType');}); 

..И PHP скрипт:

<?php 

if(!empty($_GET['GetParameter'])) 
{ 
$list = $_GET['GetParameter']; 
$qry=''; 
switch($list) 
{ 
    case 'parameterType': 
    { 
     $qry = "SELECT parameterType FROM Parameters"; 
     break; 
    } 
} 

if(empty($qry)){ echo "invalid params! "; exit; } 

$dbconn = mysql_connect('*******','*******','******') 
     or die("DB login failed!"); 

mysql_select_db('*****', $dbconn) 
     or die("Database does not exist! ".mysql_error($dbconn)); 

$result = mysql_query($qry,$dbconn) 
     or die("Query $qry failed! ".mysql_error($dbconn)); 

$rows = array(); 

while($rec = mysql_fetch_assoc($result)) 
{ 
    $rows[] = $rec; 
} 
mysql_free_result($result); 
mysql_close($dbconn); 

echo json_encode($rows); 
} 
?> 

ответ

2

Единственное, что кажется неправильным в коде эта линия

$(selobj).append($("</option><option></option>").val(obj[nameattr]).html(obj[nameattr])); 

Зачем вам закрывать/открывать/закрывать тег опции?

Не так ли? (Я отступ кода для удобочитаемости)

$(selobj).append(
    $("<option></option>") // only open/close tag 
     .html(obj[nameattr]) // this injects HTML 
); 

ИЛИ

$(selobj).append(
    $("<option></option>") // only open/close tag 
     .text(obj[nameattr]) // this only injects text 
); 

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

Кроме того, я считаю, что синтаксис ниже более читаемым:

var option = $("<option></option>").text(obj['nameattr']); 
$(selobj).append(option); 
+2

В качестве небольшой альтернативы: 'варианта вара = $ ('

+0

Мне нравится ваш синтаксис, и он имеет больше смысла в этом контексте –

+0

Спасибо. Я первоначально имел это утверждение: function loadparameters (selobj, url, nameattr) {$ (selobj) .empty(); $. GetJSON (url, {}, function (data) {$ (selobj) .append ('<значение параметра = ""> Выбрать параметр "), $. Each (data, function (i, obj) {$ (selobj) .append ($ ("