【问题标题】:Select radio button on change select list and vice versa using jQuery使用 jQuery 在更改选择列表上选择单选按钮,反之亦然
【发布时间】:2015-03-02 11:02:01
【问题描述】:

单选按钮和选择列表包含相同的值。如果选择列表发生变化,我需要选择相应的单选按钮,反之亦然。

我已经走了这么远,但我很难将这些功能结合起来......非常感谢任何帮助。

Check fiddle

$('.select-color').change(updateRadio);

function updateRadio() {
    var sval = $(this).val();
    $('input[name="color"][value="' + sval + '"]').prop('checked', true);
};

$('input[name="color"]').change(updateSelect);

function updateSelect() {
    var rval = $('input[name="color"]:checked').val();
    $('.select-color' + ' option[value="' + rval + '"]').prop('selected', true);
    $('.select-color').selectmenu('refresh');
};
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<form>
    <select name="color" class="select-color">
    <option value="1" selected>Red</option>
    <option value="2">Green</option>
    <option value="3">Blue</option>
    </select>
    <br><br>
    <input type="radio" name="color" value="1" checked="checked" /> Red<br />
    <input type="radio" name="color" value="2" /> Green<br />
    <input type="radio" name="color" value="3" /> Blue<br />
</form>

* 更新 * 在我切换到使用 Bootstrap Select 插件后,我需要更新@JoshCrozier 提供的代码。有兴趣的可以看看:

function updateElements(e) {
    var valueAttribute = e.target.value;
    $('select[name="color"]').val(valueAttribute);
    $('.select-color').selectpicker('refresh');
    $('input[name="color"]' + valueAttribute).prop('checked', true);
}
$('select[name="color"], input[name="color"]').change(updateElements);

【问题讨论】:

  • 所以一切正常,你只是想减少代码?
  • 正如 Josh 在下面的回答中提到的那样。我很难将它组合成一个函数(参见替代示例),但第一个解决方案更简洁。

标签: javascript jquery select radio-button onchange


【解决方案1】:

使用以下方法监听两个元素的change 事件:

$('.select-color, input[name="color"]').change(updateElements);.

然后使用e.target.value 获取触发元素的值。

function updateElements(e) {
    var valueAttribute = '[value="' + e.target.value + '"]';

    $('.select-color option' + valueAttribute).prop('selected', true);
    $('input[name="color"]' + valueAttribute).prop('checked', true);
}

Updated Example

$('.select-color, input[name="color"]').change(updateElements);

function updateElements(e) {
    var valueAttribute = '[value="' + e.target.value + '"]';
    $('.select-color option' + valueAttribute).prop('selected', true);
    $('input[name="color"]' + valueAttribute).prop('checked', true);
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form>
    <select name="color" class="select-color">
        <option value="1" selected>Red</option>
        <option value="2">Green</option>
        <option value="3">Blue</option>
    </select>
    <br>
    <br>
    <input type="radio" name="color" value="1" checked="checked" />Red
    <br />
    <input type="radio" name="color" value="2" />Green
    <br />
    <input type="radio" name="color" value="3" />Blue
    <br />
</form>

或者..

虽然这会使函数更长一点,但您也可以添加一些条件逻辑来确定触发元素是否为select/radio,如下所示:

function updateElements(e) {
    var $element = $(e.target),
        valueAttribute = '[value="' + $element[0].value + '"]';

    if ($element.is(':radio')) {
        $('.select-color option' + valueAttribute).prop('selected', true);
    } else {
        $('input[name="color"]' + valueAttribute).prop('checked', true);
        $('.select-color').selectmenu('refresh');
    }
}

Alternative Example

【讨论】:

  • 我正在研究替代示例,但由于我没有正确定位元素而无法使其工作。但第一个解决方案更简单!
猜你喜欢
  • 2014-04-05
  • 2020-05-17
  • 2012-09-11
  • 2011-08-31
  • 1970-01-01
  • 2016-09-28
  • 1970-01-01
  • 2016-06-17
  • 2011-07-17
相关资源
最近更新 更多