選択メニューがあり、さらに選択入力を動的に追加したいと考えています。私はこの解決策を見つけました: https://gist.github.com/snipe/1925906で、jQuery Mobile がなくてもうまく機能します。しかし、jQuery Mobile は要素を変更し、独自のコードを追加します。したがって、選択メニュー自体の前に、jQM はそのような要素を追加します (さらにいくつかありますが、それほど重要ではありません)。
<span class='ui-btn-inner'><span class='ui-btn-text'><span>Option Name</span></span><span class='ui-icon ui-icon-arrow-d ui-icon-shadow'> </span></span>
この「オプション名」はすでにここにあり、「clone()」コマンドを使用する関数を呼び出すと、この「オプション名」も複製されます。したがって、最初の選択メニューは正常に機能し、そのオプション名が変更されますが、複製されたメニューでは、別のオプションを選択しても同じままです。
更新:これが私のコードです(いくつかの場所でロシア語で申し訳ありません)。選択およびテキスト入力を含む HTML:
<fieldset class='ui-grid-a'>
<div id='inputphone1' class='clonedInputPhone'>
<div class='ui-block-a' style='max-width: 200px;'>
<select name='phone_type[]' data-mini='true'>
<option value="mobile">Мобильный</option>
<option value="home">Домашний</option>
<option value="work">Рабочий</option>
</select>
</div>
</div> <!-- inputphone1 -->
<div id='textinputphone1' class='textclonedInputPhone'>
<div class='ui-block-b'>
<input type='text' name='phone_number[]' data-mini='true' />
</div>
</div> <!-- textinputphone1 -->
</fieldset>
<fieldset class="ui-grid-a">
<div class="ui-block-a" style="max-width: 200px;">
</div>
<div class="ui-block-b">
<input id="btnAddPhone" type="button" data-icon="plus" data-iconpos="notext" data-inline="true" data-mini="true" onClick="addInput('phone_type', 'phone_number', 'clonedInputPhone', 'inputphone', 'btnAddPhone', 'btnDelPhone', '7', '0');" />
<input id="btnDelPhone" type="button" data-icon="minus" data-iconpos="notext" data-inline="true" data-mini="true" disabled="disabled" onClick="removeInput('clonedInputPhone', 'inputphone', 'btnAddPhone', 'btnDelPhone');" />
</div>
</fieldset>
そしてjs関数:
function addInput(selectName, textName, clonedInputName, inputName, btnAddName, btnDelName, limit, numstart){
// how many "duplicatable" input fields we currently have
var num = $('.' + clonedInputName).length;
$('#' + btnDelName).removeAttr('disabled').button('enable');
// the numeric ID of the new input field being added
var newNum = new Number(num + 1);
var newSelect = $('#' + inputName + num ).clone().attr('id', inputName + newNum);
$('#text' + inputName + num).after(newSelect);
var newText = document.createElement('div');
newText.id = 'text' + inputName + newNum;
newText.className = 'text' + clonedInputName;
newText.innerHTML = "<div class='ui-block-b'><div class='ui-input-text ui-shadow-inset ui-corner-all ui-btn-shadow ui-body-c ui-mini'><input type='text' name='" + textName + "[]' data-mini='true' class='ui-input-text ui-body-c'></div></div>";
$(newSelect).after(newText);
if (newNum == limit - numstart) {
$('#' + btnAddName ).prop('disabled', 'disabled').button('disable');
}
};
function removeInput(clonedInputName, inputName, btnAddName, btnDelName){
// how many "duplicatable" input fields we currently have
var num = $('.' + clonedInputName).length;
// remove the last element
$('#' + inputName + num ).remove();
$('#text' + inputName + num ).remove();
// enable the "add" button, since we've removed one
$('#' + btnAddName).removeAttr('disabled').button('enable');
// if only one element remains, disable the "remove" button
if ( num - 1 == 1)
$('#' + btnDelName ).prop('disabled', 'disabled').button('disable');
};
スクリーンショットがアップできないので、こちらhttp://d.pr/i/choo 2番目の選択メニューの「Мобильный」というラベルは、複製した「span」に書かれているので変わりません。
この問題を解決する方法はありますか? ありがとうございました!