【问题标题】:Enable all Select Options up to selectedIndex启用所有选择选项直到 selectedIndex
【发布时间】:2018-04-25 07:58:25
【问题描述】:

问候代码杂耍者!

我正在处理一个令人沮丧的问题,我似乎无法 100% 解决这个问题。

我有一个包含各种动态选项数量的选择字段(可能有多个“中间”,例如“中间 1”、“中间 2”)通过 php 停用并获取和构建。用户必须输入一个数字来激活和预选特定的选择选项。到目前为止,它可以根据用户输入预先选择选项。但我希望它启用 every 选择选项高于预选。

$(document).ready(function() {
    // PRE-SELECT TPOS BASED ON TMEMBER
    $('#inputX').change(function() {
        var member_id = $('#inputX').val();
        // FETCHED BY PHP, NO NEED TO OVERRIDE (WORKS)
	var event_id = <? echo $event_id; ?>;
	var posit_id = <? echo $posit_id; ?>;
				
        // FETCH CURRENT POSITION, MEMBER IS AT
	$.ajax({
            type: 'POST',
            url: 'fetch_pos.php',
            data: {
                   posit_id: posit_id,
                   event_id: event_id,
                   member_id: member_id
                  },
            // GET SELECT OPTION WITH POSITION VALUE MEMBER IS AT [E. G. "START"]
            success: function(html){
                // ENABLE SELECT OPTION
                $("#selectX option[value='" + html + "']").attr("disabled", false);
                // ADD SELECTED ATTRIBUTE
                $("#selectX").val(html).setAttribute("selected", "selected");
				
                // DISABLE EVERY OPTION PAST THE RETURNED VALUE AND
                // ENABLE EVERY "PREVIOUS" OPTION
                $('select#selectX').val(html).children().attr("disabled", false).filter(':selected').nextAll().prop('disabled', true);
            }
        }); 
    });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form>
    <input type="text" name="inputX" id="inputX" required="required" />
    <select name="selectX" id="selectX" required="required">
        <option selected="selected">Awaiting Input</option>
        <option disabled="disabled" value="Start">Start</option>
        <option disabled="disabled" value="Middle">Middle</option>
        <option disabled="disabled" value="Last">Last</option>
    </select>
</form>

AJAX 的返回值是选项值之一,因为我的代码需要使用它们而不是整数,如 1、2 或 3(+)。

例如: 我有相同的选择字段,但 ID 号为 3 的成员位于位置目标。所以应该启用“goal”、“middle”和“start”。如果成员编号 3 位于中间位置,我希望 only "start" 和 "middle" 启用。

有什么帮助吗?

真诚地, 蒙特利尔

编辑

因为误解:忽略AJAX。它只是将值作为成员的位置返回,因为选项值是这样定义的 --> ID 为 1 的 EG 成员位于“中间”位置,因此选项值 =“中间”以及所有 之前 (option value="start") 应该启用。

我只想根据返回值选择选项减去选项总数中的 selectIndex 来启用每个选项。

示例: 3个选项 返回值为“中间”,因此 selectIndex 1 应启用带有 selectIndex 0 和 1 的选择选项

【问题讨论】:

  • 您不能在一个页面中重复 ID。根据定义,它们是独一无二的。除此之外,这非常令人困惑且难以理解
  • 尝试使用硬编码数据而不是 ajax 将其缩小到 minimal reproducible example。解决问题后可以集成ajax
  • 你好像误会了。 Ajax 和“重复 ID”无关紧要。我只是把它们写下来完成。问题是,我只想根据(来自 ajax 返回的值,例如“中间”)selectedIndex 启用所有选项,并与 select 标记中的选项总数进行比较。
  • 这样的? jsfiddle.net/xLq6ne7s还是不太清楚
  • 是的,但是应该启用 prevAll() 并且一切都基于 selectIndex 而不是选项值(因为我的值是“开始”等)。

标签: php jquery html ajax


【解决方案1】:

我认为您正在寻找类似的东西:

$('select#test')
  //set new value on select
  .val('4')
  // enable all children
  .children().prop('disabled', false)
  // starting at selected option, disable all after it
  .filter(':selected').nextAll().prop('disabled', true)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select id="test" size="10">
  <option value="1">item 1</option>
  <option value="2">item 2</option>
  <option value="3">item 3</option>
  <option value="4">item 4</option>
  <option value="5">item 5</option>
  <option value="6">item 6</option>
  <option value="7">item 7</option>
  <option value="8">item 8</option>
  <option value="9">item 9</option>
  <option value="10">item 10</option>
</select>

【讨论】:

  • 使用:selected 比在选择器中使用value 更简单
  • 如果有帮助,请随时接受这个答案
  • 在 jsfiddle 上它可以工作,但在 ajax 上却不行。将返回的值 (html) 作为值放入您的解决方案中,但它不起作用。请参阅上面的编辑条目
  • 认真的吗?我的意思是,我不止一次明确了问题所在,并且还覆盖了代码。所以拜托,这个问题并不难理解。事实上,我最初的帖子中所写的一切都是可以理解的。
  • 最后一次:成功:function(html){...} 返回位置(开始,中间,目标)以及当我使用您的解决方案时($('#selectX').val(html).children().prop('disabled', false).filter(':selected').nextAll().prop(' disabled', true)) 而不是 .val('4') 它不起作用。我的选项值是上面提到的位置..
猜你喜欢
  • 1970-01-01
  • 2013-05-20
  • 2023-03-23
  • 1970-01-01
  • 1970-01-01
  • 2016-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多