【问题标题】:check the checkbox if name and value match with the input checkbox field如果名称和值与输入复选框字段匹配,请选中复选框
【发布时间】:2019-09-29 09:53:28
【问题描述】:

.html

var url = "http: //127.0.0.1:8000/search/?name=san&language=1&cast=1&language=2&cast=3";
  existingUrl(var);

function existingUrl(fullUrl) {
  $('.language').each(function() {
    var hasValue = fullUrl.indexOf($(this).val());
    if (hasValue != -1)
      this.checked = true;

  });
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form method="get">


  <input type="text" name="name" id="name" hidden> language
  <input type="checkbox" name="language" class="language" id="1" value="1"> cast
  <input type="checkbox" name="cast" class="cast" id="2" value="1"> language
  <input type="checkbox" name="language" class="language" id="3" value="2"> cast
  <input type="checkbox" name="cast" class="cast" id="4" value="3"> 
  <input type="submit" value="submit">
</form>

如果所有复选框输入值都具有不同的值,则它工作正常。如果我们尝试使用具有相同值的不同名称,它会检查具有该值的所有复选框。

【问题讨论】:

  • 请解释当前行为与您尝试实现的行为有何不同。
  • 如果我们在 url 中有//127.0.0.1:8000/search/?name=san&amp;language=1,它会检查所有值为 1 的复选框(cast 和值为 1 的语言复选框),而不仅仅是值为 1 的语言复选框。

标签: javascript html checkbox


【解决方案1】:

您可以从查询映射中找到项目,您可以通过$(this).prop('name') + '=' + $(this).val()此逻辑生成每个项目的键/值对来比较它们,并查看由&amp;拼接的所有查询参数创建的现有查询数组/p>

var url = 'http://127.0.0.1:8000/search/?name=san&language=1&cast=1&language=2&cast=3';
existingUrl(url.substring(url.indexOf('?') + 1));

function existingUrl(query) {
  var urlparts = query.split('&');
  $('input[type=checkbox]').each(function() {
    this.checked = urlparts.indexOf($(this).prop('name') + '=' + $(this).val());
  });
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form method="get">
  <input type="text" name="name" id="name" hidden> language
  <input type="checkbox" name="language" class="language" id="1" value="1"> cast
  <input type="checkbox" name="cast" class="cast" id="2" value="1"> language
  <input type="checkbox" name="language" class="language" id="3" value="2"> cast
  <input type="checkbox" name="cast" class="cast" id="4" value="3">
  <input type="submit" value="submit">
</form>

【讨论】:

  • 你是什么意思??你想从你的复选框还是从 url 派生?哪个是动态的?
  • 无论如何我都更新到input[type=checkbox] 希望现在对你有帮助
【解决方案2】:

由于重复的参数名称实际上不允许您使用URLSearchParams,我将拆分&amp;= 以生成键/值对。对于每一个,您都可以使用属性选择器来定位和检查相应的项目。

const url = 'http://127.0.0.1:8000/search/?name=&language=1&cast=3';

function existingUrl(fullUrl) {
  let query = fullUrl.split("?")[1];                                //?language=1&cast=3
  query.split("&").forEach(param => {                               //split on "&"
    let [name, value] = param.split("=");                           //split on "=" to get name/value pairs
    let valueSelector = value ? `[value=${value}]` : '';            //account for null value
    $(`input[name=${name}]${valueSelector}`).prop("checked", true); //check corresponding input
  });
}

existingUrl(url);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form method="get">
  <input type="text" name="name" id="name" hidden> language
  <input type="checkbox" name="language" class="language" id="1" value="1"> cast
  <input type="checkbox" name="cast" class="cast" id="2" value="1"> language
  <input type="checkbox" name="language" class="language" id="3" value="2"> cast
  <input type="checkbox" name="cast" class="cast" id="4" value="3">
  <input type="submit" value="submit">
</form>

【讨论】:

  • URLSearchParams 有 getAll 方法,允许获取同名参数
  • 如果我将 put param 与空 params.Example:search/?name=&amp;language=1&amp;language=2
【解决方案3】:

将 val() 更改为 id

function existingUrl(fullUrl) {
  $('.language').each(function() {
    var hasValue = fullUrl.indexOf($(this).attr('id'));
    if (hasValue != -1)
      this.checked = true;

  });
}

注意:indexOfstrings 一起使用是一种不好的做法,假设您在url 中有language=111,那么这也适用于语言1 和11,这不是预期的。 最好的方法是在数组中获取url参数值,然后使用indexOf不会有坏处。

【讨论】:

  • 我没有在 url 中传递复选框的 id。
  • 好的,如果它有价值,那么你想要达到什么目的?它将以相同的值检查所有内容。你必须详细说明你的需求,这样才能给你一个更好的主意。
  • 我只希望那些 chebox 会检查其名称和值是否与 url 参数匹配,而不仅仅是值匹配。
  • 好的,我已经发布了另一个答案,更符合您的需要。
【解决方案4】:

将 url 转换为字符串,然后将其传递给函数。

var url = 'http: //127.0.0.1:8000/search/?name=san&language=1&cast=1&language=2&cast=3';
existingUrl(url);

【讨论】:

  • 这不是问题,我编辑我的问题。我只希望那些 chebox 会检查其名称和值是否与 url 参数匹配,而不仅仅是值匹配。
【解决方案5】:

应该完全满足您的需要:

var url = new URL(url_string);
var languageParams = url.searchParams.getAll("language");

$('.language').each(function() {
      this.checked = languageParams.indexOf($(this).val()) != -1;
});

【讨论】:

  • 不,网址中有多个参数,我没有提到。您的代码完全是硬编码的。谢谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2019-03-25
  • 2013-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多