如何在选择器中加载所有选项而不选择

how to load all options in selector without select

本文关键字:选项 选择 加载 选择器      更新时间:2023-09-26

当我为新产品添加选项时,必须使用一个选择器来选择我需要的选项。但是所有可用选项都是必需的,并且必须在不使用选择器的情况下可见。如何在不使用选择器的情况下通过option_id添加以形成每个选项?

目录文件

<div class="ms-options">
    <p class="error" id="error_options"></p>
    <div class="options"></div>
    <div>
        <select name="options[0]" class="select_option">
            <option value="0" disabled="disabled" selected="selected"><?php echo $ms_options_add; ?></option>
            <?php foreach($options as $option) { ?>
            <option value="<?php echo $option['option_id']?>"><?php echo $option['name']; ?></option>
            <?php } ?>
        </select>
    </div>
</div>

JS.file

// add
$('body').delegate(".select_option", "change", function() {
    $(this).children(':selected').attr('disabled', 'disabled');
    var option_id = $(this).children(':selected').val();
    var select = this;
    $.get($('base').attr('href') + 'index.php?route=seller/account-product/jxRenderOptionValues&option_id=' + option_id, function(data) {
        var lastRow = $(select).parents('.ms-options').find('.option:last input:last').attr('name');
        if (typeof lastRow == "undefined") {
            var newRowNum = 1;
        } else {
            var newRowNum = parseInt(lastRow.match(/[0-9]+/g).shift()) + 1;
        }
        var data = $(data);
        data.find('input,select').attr('name', function(i,name) {
            if (name) return name.replace('product_option[0]','product_option[' + newRowNum + ']');
        });
        $('div.options').append(data);
    });
    $(this).val(0);
});

请 HLP

我的尝试

html.file

<div class="ms-options">
    <p class="error" id="error_options"></p>

    <div>
            <?php foreach($options as $option) { ?>
            <div id="<?php echo $option['option_id']?>"></div>
            <?php echo addoption($option['option_id'])?>
            <?php } ?>
    </div>
</div>

js.file

$(function() {
    function addoption(optionid) {
        var option_id = optionid;
        $.get($('base').attr('href') + 'index.php?route=seller/account-product/jxRenderOptionValues&option_id=' + option_id, function(data) {

            $('div'."optionid").append(data);
        });
    });
});

但我有这个消息

致命错误:在第 9 行的/home/moidomki/public_html/catalog/view/theme/default/template/multiseller/account-product-form-options.tpl 中调用未定义的函数 addoption()

看起来看不到我的功能?

您正在调用delegate .看到您的第一个参数了吗?这是".select_option".您可以在此处指定要在其中定义选项的标签的选择器。从这里开始,您无需再次指定它。在作为参数传递给delegate的函数中,可以改用$(this)。如果可能的话,最好在delegate内部使用$(this),因为这样jquery就不必从DOM中搜索它。

请参阅此示例:

$( "table" ).delegate( "td", "click", function() {
    $( this ).toggleClass( "chosen" );
});

取自这里。

编辑:

在此,我就尤里·利特维年科(Yurii Litvinenko)的实验做一些说明:

  • 让我首先确定,看到人们实际上试图自己学习是一件非常愉快的事情。当然,这个实验是有缺陷的,但不要忘记,学习它的最好方法是实际去做。
  • 你所指出的实际问题是你试图使用PHP调用JavaScript函数。重要的是要了解您的php代码称为服务器端或后端,而javascript代码称为客户端或前端。您的 php 在服务器上运行,您的 javascript 在用户的计算机上运行,因此,您不能在服务器端调用客户端函数
  • 我在新实验中没有看到您的选择代码
  • 如果我没记错的话,您已成功填写服务器上设置的初始选项
  • 如果你打算将选项添加到已经发送到客户端的选择中,那么你需要使用 javascript 来做,就像这样:

    function addOption(id, name) { $(".select_option").html(select_option.html() + '<option value="' + id + '">' + name + '</option>'); }