2017-01-22 61 views
0

我有下面这个脚本,假设从输入字段获取值,然后将它们添加到href链接中。但我一直在控制台收到此错误:JQuery错误:未捕获错误:语法错误,无法识别的表达式

Uncaught Error: Syntax error, unrecognized expression: ?add-to-cart=7690&variation_id=8498&attribute_pa_color=gold

下面是脚本:

jQuery(document).on("click", ".variations_form.cart .variation_buttons_wrapper a", function(){ 
    // Get all the values needed for the URL 
    var add_to_cart = jQuery(this).parent().parent().parent().parent().parent().parent().find('input[name="add-to-cart"]').val(); 
    var variation_id = jQuery(this).parent().parent().parent().parent().parent().parent().find('input[name="variation_id"]').val();  
    var pa_color = jQuery(this).attr("id"); 
    setTimeout(function(){ 
    // Craft the URL 
    var link = jQuery("?add-to-cart=" + add_to_cart + "&variation_id=" + variation_id + "&attribute_pa_color=" + pa_color); 
    alert(link); 
    }, 500); 
    }); 

任何想法?

回答

1

您正在使用错误的方式使用jQuery对象。
如果你想制作一个链接做这种方式:

var link = "?add-to-cart=" + add_to_cart + 
"&variation_id=" + variation_id + 
"&attribute_pa_color=" + pa_color; 

无需这里的jQuery对象。

+1

谢谢你的工作。 – mysticalghoul

+1

我会但是显然我必须再等5分钟。 – mysticalghoul

0

jQuery("?add-to-cart="...)不是有效的DOM选择器,因此是错误。你需要把它作为一个字符串。甚至更好,使用jQuery.param

var link = jQuery.param({ 
    'add-to-cart': add_to_cart, 
    'variation_id': variation_id 
}) 

BTW,而不是做这样的:

var add_to_cart = jQuery(this).parent().parent().parent().parent().parent().parent().find('input[name="add-to-cart"]').val();

你可以做这样的事情:

jQuery(this).closest('.variations_form').find('input...')

(替换variations_form与任何父类名称)

1

在制作URL时不需要jQuery对象。只需使用它,而无需使用物体。

var link = "?add-to-cart=" + add_to_cart + "&variation_id=" + variation_id + "&attribute_pa_color=" + pa_color; 
1

这是因为你传递查询字符串作为jQuery选择器。你需要为此创建一个有效的选择器。

为了增加HREF链接,首先选择的链接并获取URL

var link = $("#link").attr("href"); 

查询字符串然后添加到它

link += "?add-to-cart=" + add_to_cart + "&variation_id=" + variation_id + "&attribute_pa_color=" + pa_color; 

建议:

如果您使用的是形式,将所有字段作为查询字符串的快捷方式是使用jQuery serialize方法。示例:

var queryString = $("#form").serialize(); 

确保您的所有表单字段都具有名称属性。

几句智慧: 避免许多parent()调用到达目标元素。如果DOM更改并且嵌套级别增加或减少,则代码将会中断。

相关问题