'onclick' 存储值不起作用
'onclick' Storing Value Not Working
所以我有这个 <a>
标签:
<a href="/book-testdrive" class="addtocart" value="YX57WDL" title="Book Test Drive">
<i class="glyphicon glyphicon-road"></i>
<span> Book Test Drive</span>
</a>
如您所见,它被赋予了 value="YX57WDL"
的值,现在我想做的是在单击 a 标签并将其放入变量时捕获该值。
我的页面上有许多 <a>
标签,其中包含许多动态创建的不同值。如果用户按下另一个标签,我希望它存储在同一个变量中,但用唯一的 <a>
标签值替换该值。
此外,变量需要在站点范围内存储,我想解决这个问题的方法是 Web 存储 API。
到目前为止我已经尝试使用这个 Javascript:
var links = document.querySelectorAll('.addtocart ');
links.onclick = function(){
localstorage['storedValue'] = this.value ;
}
但是当我 console.log() 链接变量时它什么都不包含。
知道为什么会这样吗?
谢谢
问题是 document.querySelectorAll
returns 一个(非实时)节点列表。这意味着它基本上是一个数组,所以你可以为每个数组做一个循环:
for (var i = 0; i < links.length; i++) {
links[i].onclick = function(){
localStorage['storedValue'] = this.value ;
}
}
另请注意,我将 localstorage
更改为 localStorage
,因为它区分大小写。
您需要等到 DOM 加载完毕,否则如果您要查找的元素尚未添加到 [=24],则对 document.querySelectorAll()
的调用将找不到任何内容=] 还没有。
我看到你添加了 jquery 作为标签,所以我假设你使用的是 jquery。如果是这种情况,您可以使用 jquery 函数包装您的代码以等待 DOM 准备就绪,如下所示:
$(document).ready(function() {
var links = document.querySelectorAll('.addtocart ');
links.onclick = function(){
localStorage['storedValue'] = this.value ;
}
});
此外,如果您使用的是 jquery,您可以使用它的 on
函数来简化此操作。
$(document).ready(function() {
$('.addtocart').on('click', function() {
localStorage['storedValue'] = this.value;
}
});
如果您没有使用 jquery,请参阅 this 关于如何在没有 jquery $(document).ready()
函数的情况下等待 DOM 加载的问题。
尝试使用“.getAttribute('value')”代替“.value”:
var links = document.querySelector('a.addtocart');
links.onclick = function(){
localStorage['storedValue'] = links.getAttribute('value');
}
由于您使用的是 jQuery,您可以这样做:
$("body").on("click", ".addtocart", function(e) {
localstorage['storedValue'] = $(this).val();
});
你肯定想知道为什么你的尝试失败了。事实上,您距离解决方案并不太远,但您可能 运行 在创建链接之前使用脚本。使用 jQuery 的 .on()
函数,您可以监听与选择器(即 ".addtocart"
)匹配的当前和未来元素。
所以我有这个 <a>
标签:
<a href="/book-testdrive" class="addtocart" value="YX57WDL" title="Book Test Drive">
<i class="glyphicon glyphicon-road"></i>
<span> Book Test Drive</span>
</a>
如您所见,它被赋予了 value="YX57WDL"
的值,现在我想做的是在单击 a 标签并将其放入变量时捕获该值。
我的页面上有许多 <a>
标签,其中包含许多动态创建的不同值。如果用户按下另一个标签,我希望它存储在同一个变量中,但用唯一的 <a>
标签值替换该值。
此外,变量需要在站点范围内存储,我想解决这个问题的方法是 Web 存储 API。
到目前为止我已经尝试使用这个 Javascript:
var links = document.querySelectorAll('.addtocart ');
links.onclick = function(){
localstorage['storedValue'] = this.value ;
}
但是当我 console.log() 链接变量时它什么都不包含。
知道为什么会这样吗?
谢谢
问题是 document.querySelectorAll
returns 一个(非实时)节点列表。这意味着它基本上是一个数组,所以你可以为每个数组做一个循环:
for (var i = 0; i < links.length; i++) {
links[i].onclick = function(){
localStorage['storedValue'] = this.value ;
}
}
另请注意,我将 localstorage
更改为 localStorage
,因为它区分大小写。
您需要等到 DOM 加载完毕,否则如果您要查找的元素尚未添加到 [=24],则对 document.querySelectorAll()
的调用将找不到任何内容=] 还没有。
我看到你添加了 jquery 作为标签,所以我假设你使用的是 jquery。如果是这种情况,您可以使用 jquery 函数包装您的代码以等待 DOM 准备就绪,如下所示:
$(document).ready(function() {
var links = document.querySelectorAll('.addtocart ');
links.onclick = function(){
localStorage['storedValue'] = this.value ;
}
});
此外,如果您使用的是 jquery,您可以使用它的 on
函数来简化此操作。
$(document).ready(function() {
$('.addtocart').on('click', function() {
localStorage['storedValue'] = this.value;
}
});
如果您没有使用 jquery,请参阅 this 关于如何在没有 jquery $(document).ready()
函数的情况下等待 DOM 加载的问题。
尝试使用“.getAttribute('value')”代替“.value”:
var links = document.querySelector('a.addtocart');
links.onclick = function(){
localStorage['storedValue'] = links.getAttribute('value');
}
由于您使用的是 jQuery,您可以这样做:
$("body").on("click", ".addtocart", function(e) {
localstorage['storedValue'] = $(this).val();
});
你肯定想知道为什么你的尝试失败了。事实上,您距离解决方案并不太远,但您可能 运行 在创建链接之前使用脚本。使用 jQuery 的 .on()
函数,您可以监听与选择器(即 ".addtocart"
)匹配的当前和未来元素。