.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>

Funciona bien si todos los valores de entrada de la casilla de verificación tienen un valor diferente. Si intentamos con un nombre diferente que tenga el mismo valor, marcó todas las casillas de verificación con ese valor.

0
sanjeet pal 28 sep. 2019 a las 08:03

5 respuestas

La mejor respuesta

Debido al hecho de que los nombres de parámetros duplicados realmente no le permiten usar URLSearchParams, me dividiría en & y = para generar pares clave / valor. Para cada uno, puede usar selectores de atributos para seleccionar y verificar los elementos correspondientes.

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>
1
Tyler Roper 29 sep. 2019 a las 01:53

Puede encontrar elementos de un mapa de consultas, puede compararlos generando par clave / valor de cada elemento mediante $(this).prop('name') + '=' + $(this).val() esta lógica y buscar en su matriz de consultas existente, creada por todos los parámetros de consulta empalmados por &

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>
2
joyBlanks 28 sep. 2019 a las 05:48

Convertir url en cadena y luego pasarlo a la función.

var url = 'http: //127.0.0.1:8000/search/?name=san&language=1&cast=1&language=2&cast=3';
existingUrl(url);
0
rajender kumar 28 sep. 2019 a las 05:21

Cambiar valor () a id

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

  });
}

Nota: es una mala práctica usar indexOf con strings, digamos que tienes language = 111 en la URL, entonces eso también funcionará para los idiomas 1 y 11, lo cual no está previsto . El mejor enfoque es obtener valores de parámetros de URL en una matriz y luego usar indexOf no será perjudicial.

0
Bilal Siddiqui 28 sep. 2019 a las 05:13

Debería funcionar exactamente lo que necesita:

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

$('.language').each(function() {
      this.checked = languageParams.indexOf($(this).val()) != -1;
});
0
Bilal Siddiqui 28 sep. 2019 a las 05:37