You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于只读输入框值自动填充另一只读输入框的技术求助

解决方案:直接在下拉框事件中完成双输入框赋值

我完全明白你的困扰——readonly状态的输入框通过JavaScript赋值时,浏览器不会自动触发change事件,这就是你之前所有方案失效的核心原因!与其费劲去触发这个本就不会发生的事件,不如直接在下拉框的change事件里一次性完成两个输入框的赋值操作,一步到位解决问题。

修改后的完整代码

PHP部分(基本无需改动,可优化数据存储)

echo '<td align="left" width="8%" height="25px">';
$ddlquery4 = "SELECT * FROM dvd ORDER BY title ASC";
$ddlresult4 = mysqli_query($dbc, $ddlquery4) or die("Bad SQL: $ddlquery4");
echo '<select class="dropdown" name="dvdid" id="movieID" size="1">';
echo '<option value=""></option>';
while($ddlrow4=mysqli_fetch_array($ddlresult4, MYSQLI_ASSOC)){
    // 可选优化:把价格也存入data属性,后续JS直接取值更灵活
    $price = '';
    switch($ddlrow4['categoryname']){
        case 'Regular': $price = '.50'; break;
        case 'Popular': $price = '1.00'; break;
        case 'Current Release': $price = '1.50'; break;
        case 'Current Hit': $price = '2.00'; break;
    }
    echo "<option value='".$ddlrow4['dvdid']."' 
                  data-categoryname='".$ddlrow4['categoryname']."'
                  data-price='".$price."'>" 
         . $ddlrow4['title'] . "</option>";
}
echo "</select>";
echo '</td>';
echo '<td align="left" width="5%">';
echo '<input style="font-size:20px; border:0px; background:none; box-shadow:none;" 
             type="text" id="catName" name="categoryname" readonly>';
echo '</td>';
echo '<td align="left" width="4%">';
echo '<input type="text" id="catprice" name="price" readonly>';
echo '</td>';

JavaScript/jQuery部分(合并逻辑,无需监听只读输入框)

$(document).ready(function() {
    $('#movieID').change(function() {
        const selectedOption = $(this).find('option:selected');
        
        // 方式1:直接从data属性取预设好的价格(推荐,维护更方便)
        $('#catName').val(selectedOption.data('categoryname'));
        $('#catprice').val(selectedOption.data('price'));

        // 如果你不想在PHP里处理价格,也可以用原有的判断逻辑:
        // const categoryName = selectedOption.data('categoryname');
        // let price = '';
        // switch(categoryName) {
        //     case 'Regular': price = '.50'; break;
        //     case 'Popular': price = '1.00'; break;
        //     case 'Current Release': price = '1.50'; break;
        //     case 'Current Hit': price = '2.00'; break;
        // }
        // $('#catName').val(categoryName);
        // $('#catprice').val(price);
    });
});

为什么之前的方案都无效?

当你通过$('input[id=catName]').val(...)给只读输入框赋值时,这属于程序式修改,浏览器只会更新输入框的显示内容,不会触发change事件——这个事件只有用户手动操作输入框时才会触发。所以你绑定在#catName上的change监听永远不会被执行,自然无法同步更新价格。

内容的提问来源于stack exchange,提问作者Nu2This

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 03:55:17