0

私は次のhtmlを持っています:

<select name="user_level" id="user_level" class="input" onChange="javascript:choosePackage(this.value);" >
<option value="1" >Single</option>
<option value="3" >Multi</option>   
<option value="7" >Super</option>                     
</select>

<div id="showPackageSelect" ></div> 

そしてこれは私のjsです:

<script type="text/javascript">

function choosePackage(packageselected){

if(packageselected=='3') { $("#showPackageSelect").replaceWith("<div id='normal'>User Package</div><select name='user_package' id='user_package' class='input'><?php $rPackages = mysql_query('select * from packages WHERE id>=2 AND id <=5 ORDER BY id DESC');while ($rp = mysql_fetch_array($rPackages)) { ?><option value='<?php echo $rp['id'];?>'><?php echo $rp['package'];?></option><?php } ?></select>");

} else if(packageselected=='1') { $("#showPackageSelect").replaceWith("<div id='normal'>User Package</div><select name='user_package' id='user_package' class='input'><option value='1'>Super User</option></select>");

} else if(packageselected=='6') { $("#showPackageSelect").replaceWith("<div id='normal'>User Package</div><select name='user_package' id='user_package' class='input'><option value='6'>Single</option></select>"); 

} else { alert('this should never happen!'); }

}

</script>

if elseなどを使用していくつかの方法を試しました。面白いことに、値をアラートすると正常に機能し、テストすると1回実行されますが、その後は単一に戻りません。

よろしくお願いしますジョニー

アップデート:

<script type="text/javascript">

function choosePackage(packageselected){

if(packageselected=='3')
$("#showPackageSelect").replaceWith("<div id='showPackageSelect' ><div id='normal'>User Package</div><select name='user_package' id='user_package' class='input'><?php $rPackages = mysql_query('select * from packages WHERE id>=2 AND id <=5 ORDER BY id DESC');while ($rp = mysql_fetch_array($rPackages)) { ?><option value='<?php echo $rp['id'];?>'><?php echo $rp['package'];?></option><?php } ?></select></div>");

else if(packageselected=='1') 
$("#showPackageSelect").replaceWith("<div id='showPackageSelect' ><div id='normal'>User Package</div><select name='user_package' id='user_package' class='input'><option value='1'>Super User</option></select></div>");

else if(packageselected=='7')
$("#showPackageSelect").replaceWith("<div id='showPackageSelect' ><div id='normal'>User Package</div><select name='user_package' id='user_package' class='input'><option value='6'>Single</option></select></div>"); 
}

</script>
4

2 に答える 2

0

ここにあるjQueryのドキュメントには次のように書かれています。

.replaceWith()メソッドは、DOMからコンテンツを削除し、1回の呼び出しでその場所に新しいコンテンツを挿入します。

showPackageSelect関数に入れたコンテンツに置き換えていると思い.replaceWith()ます。つまり、 DOMからshowPackageSelect最初のイベントを削除します。onChangeDOMにdiv存在しなくなったため、choosePackage()関数が見つからなくなったため、関数は機能しなくなりましたshowPackageSelect div。これが、初めてしか機能しない理由かもしれません。

現在のメソッドを使用してコンテンツを変更する場合.html()は、のHTMLを変更する方法を使用することをお勧めしますdiv。これは、を使用したコードのjsFiddleの例.html()です。

于 2012-07-19T02:22:46.507 に答える
0

「select」要素の値を取得するには、.valueを介してその値を取得することはできませんが、代わりに、そのすべてのオプションをトラバースして、選択されているオプションを見つける必要があります。これは、「select」要素で複数選択できるためです。

スクリプトにすでにjQueryを使用している場合は、次のスクリプトを使用すると簡単になる可能性があります。

$("#user_level").change(function(eventObject){
    var packageSelected = $("option:selected", eventObject).val();

    if(packageselected=='3') {
        $("#showPackageSelect").replaceWith("<div id='normal'>User Package</div><select name='user_package' id='user_package' class='input'><?php $rPackages = mysql_query('select * from packages WHERE id>=2 AND id <=5 ORDER BY id DESC');while ($rp = mysql_fetch_array($rPackages)) { ?><option value='<?php echo $rp['id'];?>'><?php echo $rp['package'];?></option><?php } ?></select>");
    } else if (packageselected=='1') {
        $("#showPackageSelect").replaceWith("<div id='normal'>User Package</div><select name='user_package' id='user_package' class='input'><option value='1'>Super User</option></select>");
    } else if (packageselected=='6') {
        $("#showPackageSelect").replaceWith("<div id='normal'>User Package</div><select name='user_package' id='user_package' class='input'><option value='6'>Single</option></select>");
    } else {
        alert('this should never happen!');
    }

});
于 2012-07-19T02:29:23.580 に答える