2017-01-22 169 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更改並且嵌套級別增加或減少,則代碼將會中斷。

相關問題