JQuery проверить, если URL уже имеет строку запроса - PullRequest
1 голос
/ 20 января 2012

Если сайт загружается впервые, то, когда пользователь выбирает раскрывающийся список местоположений для больницы, он должен передать hos = somelocation в качестве строки запроса к URL-адресу.http://mysite/events/Pages/default.aspx?hos=Munster

Если URL-адрес уже есть один вместе с другой строкой запроса, такой как http://mysite/events/Pages/default.aspx?kwd=cancer&hos=Munster

, тогда мне нужно проверить, есть ли & hos уже в window.location.search..и еслионо уже есть, затем замените любое значение, которое оно имеет, на недавно выбранное, не добавляя к нему, например: http://mysite/events/Pages/default.aspx?kwd=cancer&hos=Munster&hos=Carmel -> что не то, что я хочу.Я хочу, чтобы это было http://mysite/events/Pages/default.aspx?kwd=cancer&hos=Carmel, как только пользователь выберет Кармель из выпадающего списка.Кто-то, пожалуйста, помогите!

$(".LocationDropDown").change(function(e){
    var querystring=window.location.search;
    var currentURL=$(location).attr('href');
    if(querystring=='') {
        window.location.href= ( $(this).val() == "All Hospitals" ) ? 'http://mysitee/events/Pages/default.aspx':'http://mysite/events/Pages/default.aspx?hos='+$(this).val();
        }
        else            
          {
            window.location.href = ( $(this).val() == "All Hospitals" ) ? 'http://mysitee/events/Pages/default.aspx':currentURL+'&hos'+$(this).val();
   }
});

Ответы [ 4 ]

0 голосов
/ 20 января 2012

Просто подсказка кода, но не проверенная.

$(".LocationDropDown").change(function(e){
    var querystring=window.location.search;
    var currentURL=$(location).attr('href');
    if(querystring=='') {
        window.location.href= ( $(this).val() == "All Hospitals" ) ? 'http://mysitee/events/Pages/default.aspx':'http://mysite/events/Pages/default.aspx?hos='+$(this).val();
    }
    else if(str.indexOf("hos=")==-1)
    {
        window.location.href = ( $(this).val() == "All Hospitals" ) ? 'http://mysitee/events/Pages/default.aspx':currentURL+'&hos='+$(this).val();
    }
    else{
        window.location.href= ( $(this).val() == "All Hospitals" ) ? 'http://mysitee/events/Pages/default.aspx': getReplacedValForHospital(currentURL, $(this).val());
    }
});
function getReplacedValForHospital(currentURL, hospitalVal) {
    var tempString = currentURL.substring(currentURL.indexOf("hos="));
    currentURL = currentURL.replace(tempString,"hos="+hospitalVal);
    return currentURL;
}
0 голосов
/ 20 января 2012

это может быть связано с использованием переменной currentURL в другой части. Использование http://mysite/events/Pages/default.aspx?hos='+$(this).val(); вместо currentURL

0 голосов
/ 20 января 2012

Я ненавижу просто ссылаться на сайт, но я нашел решение этого человека, и оно выглядит неплохо для получения и установки параметров URL через javascript.

http://www.west -wind.com / Weblog / сообщений / 2009 / Сентябрь / 07 / Get-и-Set-QueryString-значения-в-JavaScript

//check if querystring contains hos
if (getUrlEncodedKey('hos', location.search) != '') {
     //set new value
     setUrlEncodedKey('hos', newval);
}

getUrlEncodedKey = function(key, query) {
    if (!query)
        query = window.location.search;    
    var re = new RegExp("[?|&]" + key + "=(.*?)&");
    var matches = re.exec(query + "&");
    if (!matches || matches.length < 2)
        return "";
    return decodeURIComponent(matches[1].replace("+", " "));
}
setUrlEncodedKey = function(key, value, query) {

    query = query || window.location.search;
    var q = query + "&";
    var re = new RegExp("[?|&]" + key + "=.*?&");
    if (!re.test(q))
        q += key + "=" + encodeURI(value);
    else
        q = q.replace(re, "&" + key + "=" + encodeURIComponent(value) + "&");
    q = q.trimStart("&").trimEnd("&");
    return q[0]=="?" ? q : q = "?" + q;
}

//There are a couple of helpers in use here. For completeness here they are as well:    
String.prototype.trimEnd = function(c) {
    if (c)        
        return this.replace(new RegExp(c.escapeRegExp() + "*$"), '');
    return this.replace(/\s+$/, '');
}
String.prototype.trimStart = function(c) {
    if (c)
        return this.replace(new RegExp("^" + c.escapeRegExp() + "*"), '');
    return this.replace(/^\s+/, '');
}

String.prototype.escapeRegExp = function() {
    return this.replace(/[.*+?^${}()|[\]\/\\]/g, "\\$0");
};
0 голосов
/ 20 января 2012

Попробуйте плагин BBQ для jQuery .Это действительно простой в использовании и лучший плагин, если вы собираетесь использовать несколько значений строки запроса, как в вашем примере.

Чтобы получить переменные, вы можете использовать:

$.bbq.getState( "kwd" );
$.bbq.getState( "hos" );

и дляустановить состояние:

$.bbq.pushState({ hos: Carmel }); //pushState has an optional 2nd param 
//for whether or not to delete all the params not in the push function or to keep them.

и выполнить функцию при изменении URL:

$(window).bind( "hashchange", function(e) {
    // In jQuery 1.4, use e.getState( "url" );
    var url = $.bbq.getState( "url" );
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...