【问题标题】:Pass parameter to function onclick jQuery将参数传递给函数onclick jQuery
【发布时间】:2017-02-05 22:22:24
【问题描述】:

我正在尝试使用 jquery 从 URL 中删除参数。实际上参数必须动态传递,并且应该是单击时父元素的文本。然后在为其添加前缀之后,我需要将其传递给函数。

如下图所示,当有人点击清除链接时,它会从其标题中获取过滤器名称,即COLOR,添加一些前缀后,例如js_,然后将此 js_color 传递给函数。

到目前为止,我已经做了类似的事情,但它似乎不起作用。你能帮帮我吗?

谢谢

编辑:

如果我手动传递参数值,它工作正常。

工作:removeParam("js_color", url)

不工作:removeParam(param, url)

小提琴:https://jsfiddle.net/jz1dyh9r/

函数未获取第一个参数的值。

    // Append Clear Link to element
    $('.woof_redraw_zone .woof_container_inner h4').each(function(){
        $(this).append('<a class="clear_filters">Clear</a>');
    });

    // Extract parameter, pass it to function and generate new URL
    $('.woof_redraw_zone .woof_container_inner h4').click(function(){
        var url = window.location.href;
        var prefix = ("pa_");
        var key = $(this).clone().children().remove().end().text().toLowerCase();
        var param = prefix + key;
        var alteredURL = removeParam(param, url);
        console.log( removeParam(param, url) );
        // window.location.href = alteredURL;
    });

//参考:Remove a parameter to the URL with JavaScript

    function removeParam(key, sourceURL) {
        var rtn = sourceURL.split("?")[0],
            param,
            params_arr = [],
            queryString = (sourceURL.indexOf("?") !== -1) ? sourceURL.split("?")[1] : "";
        if (queryString !== "") {
            params_arr = queryString.split("&");
            for (var i = params_arr.length - 1; i >= 0; i -= 1) {
                param = params_arr[i].split("=")[0];
                if (param === key) {
                    params_arr.splice(i, 1);
                }
            }
            rtn = rtn + "?" + params_arr.join("&");
        }
        return rtn;
    }       

【问题讨论】:

  • 如果你登录paramurl会得到什么?
  • 如果我手动传递参数,它工作正常
  • 很明显param 不是你想的那样,你有没有尝试将它记录到控制台。
  • 我尝试使用控制台但没有成功。
  • 好的,发现您有问题 - 您的密钥字符串中有空格。将您与param.trim() === key.trim() 进行比较,您就可以开始了

标签: javascript jquery url url-rewriting extraction


【解决方案1】:

您要比较的字符串可能包含空格和换行符,请在比较之前在字符串上使用trim()

function removeParam(key, sourceURL) {
        var rtn = sourceURL.split("?")[0],
            param,
            params_arr = [],
            queryString = (sourceURL.indexOf("?") !== -1) ? sourceURL.split("?")[1] : "";
        if (queryString !== "") {
            params_arr = queryString.split("&");
            for (var i = params_arr.length - 1; i >= 0; i -= 1) {
                param = params_arr[i].split("=")[0];
                if (param.trim() === key.trim()) { // compare trimmed strings
                    params_arr.splice(i, 1);
                }
            }
            rtn = rtn + "?" + params_arr.join("&");
        }
        return rtn;
    }       

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-19
    • 2013-01-27
    • 2010-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-07
    相关资源
    最近更新 更多