2013-07-14 43 views
0

我有一個選擇字段,其內容根據另一個選擇字段而變化。隨着我的腳本被禁用,我的選擇帖子很好,並插入我的數據庫。但是,當我用javascript來選擇字段時,我的發佈值默認爲默認值(「1」)。我也在運行chzn(http://harvesthq.github.io/chosen/),但問題仍然存在,即使它被禁用。這是我的JS:使用javascript處理後,選擇選項無法正確發佈

$(function() { 
    var $dropdown = $("#type"); 
    var $for = $("#for"); 

    $for.clone().attr('id', 'for2').insertAfter($for).hide(); 
    $for2 = $('#for2'); 

    function getType() { 
     $type = $dropdown.val(); 
     return $type; 
    } 

    function checkType($type) { 
     if ($type == 1) { 
      $for.find('.skin').remove(); 
      $for2.find('.champion').clone().appendTo($for).trigger("liszt:updated"); 
     } else if ($type == 2) { 
      $for.find('.champion').remove(); 
      $for2.find('.skin').clone().appendTo($for).trigger("liszt:updated"); 
     } 
    } 

    getType(); 
    checkType($type); 

    $dropdown.change(function() { 
     getType(); 
     checkType($type); 
    }); 
}); 

是什麼原因導致此問題?爲尋找謝謝:)

編輯運行alert($for.find($("option:selected")).text());確實返回我選擇的選項。我真的不明白爲什麼它沒有發佈。

EDIT2我可以得到它通過附加(隱藏)文本字段工作,並設置它的價值時,我更新我的控制器選擇變化,當然使用了「價值」:

$('<input/>').attr({ type: 'text', id: 'for-value', name: 'for-value' }).insertAfter($for).hide(); 
$forValue = $('#for-value'); 

$for.change(function() { 
    $forVal = $for.val(); 
    $forValue.val($forVal); 
}); 

但是,這是如此醜陋....爲什麼我不能按常規方式得到它?我錯過了什麼嗎?

EDIT3 按照要求,HTML:

<form action="insert" method="POST"> 

    ... 

    <label for="type">type</label> 
    <select id="type" name="type"> 
     <option value="1">Champion</option> 
     <option value="2">Skin</option> 
    </select> 

    <label for="for">For</label> 
    <select id="for" name="for"> 
     @foreach ($skins as $skin) 
     <option class="skin" value="{{ $skin->id }}">{{ $skin->name }}</option> 
     @endforeach 
     @foreach ($champions as $champion) 
     <option class="champion" value="{{ $champion->id }}">{{ $champion->name }}</option> 
     @endforeach 
    </select> 

    ... 

    <button>Insert</button> 

</form> 

edit4更糟糕的是,通過Stano的建議,包括名稱,而克隆使得它的工作,甚至工作,如果我刪除鏈中的屬性:

$for.clone().attr('id', 'for2').insertAfter($for).hide(); //doesn't work. 
$for.clone().attr({ id: 'for2', name: 'for2' }).insertAfter($for).hide(); //works 
$for.clone().attr({ id: 'for2', name: 'for2' }).removeAttr('name') 
    .insertAfter($for).hide(); //works even if I remove the attribute 
+0

一件事說 - 你從返回的getType $類型函數但不存儲它,即$ type = getType();然而你還沒有在函數中聲明$ var,因此無論如何它都是全局的。 – PaulMrG

+0

我真的需要存儲嗎?我正在執行加載功能。我不知道我是否在跟蹤你想說的話。 – veksen

+0

是的,我正在使用PHP。沒有JS的情況下,這些值會很好地發佈。名稱已設置。如果我使用文本字段並將其值設置爲更改時的選擇值,則可以使其工作,但是,像這樣:array(...'type'=>'2','for'=>' 1','for-value'=>'6',...)'for-value是使用'$('#for-value')。val($ for.val())的文本字段的值。 ;' – veksen

回答

1

克隆o bject也會帶上它name,並且發佈將採用HTML中引用的最後一個name,這是第一個select的副本。這就是爲什麼它會始終返回1

卸下,或在連鎖專櫃重命名name屬性這一點,就像這樣:

$for.clone().attr('id', 'for2').removeAttr('name').insertAfter($for).hide();