简体   繁体   English

使用数据属性和单击功能将数据值推送到div

[英]Using data-attribute and click function to push data value to div

I am using data-attributes to hold values for product names. 我正在使用数据属性来保存产品名称的值。 When a user clicks on .compProdBlock I want the data-fastName to populate within the fastTitle field. 当用户单击.compProdBlock我希望data-fastName填充在fastTitle字段内。

In my attempt I am using the push and each function. 在尝试中,我正在使用pusheach功能。 I am not getting any errors, but the data is not populating. 我没有收到任何错误,但是数据没有填充。

Does anyone see what I am doing wrong? 有人看到我在做什么错吗? Only the top two choices have data associated with them. 只有前两个选择具有与之关联的数据。

 var fastShowName = []; $('.compProdBlock').click(function() { $('.compProdBlock').each(function() { fastShowName.push($($(this).data('fastName'))); }); $('#fastTitle').html(fastShowName); }); 
 #compSec2Block1, #compSec2Block2 { display: inline-block; vertical-align: top; height: 80vh; } #compSec2Block1 { width: 40%; } #compSec2Block2 { width: 60%; } #compSec2Block2inner { width: 100%; height: 100%; } .compProdBlock { width: 50%; height: 50%; display: inline-block; position: relative; border-right: 2px solid #000; box-sizing: border-box; cursor: pointer; } .compProdBlock img { width: 100%; height: 100%; object-fit: cover; } .pTitleWrap { position: absolute; bottom: 0; left: 0; width: 100%; } .boxTitleWrap { background: rgba(0, 0, 0, .6); width: 100%; } .boxTitle25 { color: #FFF; font-size: 2rem; font-family: 'Muli', sans-serif; font-weight: 400; line-height: 1.4em; padding: 10px 0px 10px 20px; text-transform: uppercase; width: 85%; } 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> <section id="compSec2" class="sec"> <div id="compSec2Block1"> <h3 class="dG" id="fastTitle"></h3> </div> <div id="compSec2Block2"> <div id="compSec2Block2inner"> <div class="compProdBlock" data-fastName="Standard Fastener" data-fastImg=""> <img src="https://s.shld.net/is/image/Sears/s_102316_Tools_Holiday_VisualNav_2-qm-$cq_width_250$" alt="Standard Fastener"> <div class="pTitleWrap"> <div class="boxTitleWrap"> <h2 class="boxTitle25">Standard Fastener</h2> </div> </div> </div> <div class="compProdBlock" data-fastName="Universal Fastener"> <img src="https://s.shld.net/is/image/Sears/s_102316_Tools_Holiday_VisualNav_2-qm-$cq_width_250$" alt="Standard Fastener"> </div> <div class="compProdBlock"> <img src="https://s.shld.net/is/image/Sears/s_102316_Tools_Holiday_VisualNav_2-qm-$cq_width_250$" alt="Standard Fastener"> </div> <div class="compProdBlock"> <img src="https://s.shld.net/is/image/Sears/s_102316_Tools_Holiday_VisualNav_2-qm-$cq_width_250$" alt="Standard Fastener"> </div> </div> </div> </section> 

The name of the data-* attribute should be data-fast-name instead of data-fastName . data-* attribute的名称应为data-fast-name而不是data-fastName

No need for loop you could set the data of the current clicked element using : 无需循环,您可以使用来设置当前单击元素的数据:

$('#fastTitle').text( $(this).data('fast-name') );

 $(function() { $('.compProdBlock').click(function() { $('#fastTitle').text($(this).data('fast-name')); }); $('.compProdBlock:first').click(); }); 
 #compSec2Block1, #compSec2Block2 { display: inline-block; vertical-align: top; height: 80vh; } #compSec2Block1 { width: 40%; } #compSec2Block2 { width: 60%; } #compSec2Block2inner { width: 100%; height: 100%; } .compProdBlock { width: 50%; height: 50%; display: inline-block; position: relative; border-right: 2px solid #000; box-sizing: border-box; cursor: pointer; } .compProdBlock img { width: 100%; height: 100%; object-fit: cover; } .pTitleWrap { position: absolute; bottom: 0; left: 0; width: 100%; } .boxTitleWrap { background: rgba(0, 0, 0, .6); width: 100%; } .boxTitle25 { color: #FFF; font-size: 2rem; font-family: 'Muli', sans-serif; font-weight: 400; line-height: 1.4em; padding: 10px 0px 10px 20px; text-transform: uppercase; width: 85%; } 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> <section id="compSec2" class="sec"> <div id="compSec2Block1"> <h3 class="dG" id="fastTitle"></h3> </div> <div id="compSec2Block2"> <div id="compSec2Block2inner"> <div class="compProdBlock" data-fast-name="Standard Fastener" data-fastImg=""> <img src="https://s.shld.net/is/image/Sears/s_102316_Tools_Holiday_VisualNav_2-qm-$cq_width_250$" alt="Standard Fastener"> <div class="pTitleWrap"> <div class="boxTitleWrap"> <h2 class="boxTitle25">Standard Fastener</h2> </div> </div> </div> <div class="compProdBlock" data-fast-name="Universal Fastener"> <img src="https://s.shld.net/is/image/Sears/s_102316_Tools_Holiday_VisualNav_2-qm-$cq_width_250$" alt="Standard Fastener"> </div> <div class="compProdBlock"> <img src="https://s.shld.net/is/image/Sears/s_102316_Tools_Holiday_VisualNav_2-qm-$cq_width_250$" alt="Standard Fastener"> </div> <div class="compProdBlock"> <img src="https://s.shld.net/is/image/Sears/s_102316_Tools_Holiday_VisualNav_2-qm-$cq_width_250$" alt="Standard Fastener"> </div> </div> </div> </section> 

  1. Use $('#id').attr('data-fastName') instead of $('#id').data('fastName') 使用$('#id').attr('data-fastName')代替$('#id').data('fastName')

  2. If you only want to display the clicked item as title, you don't need to push all the fastName into an array. 如果只想将单击的项目显示为标题,则无需将所有fastName推入数组。

 var fastShowName = []; $('.compProdBlock').click(function () { $('#fastTitle').html($(this).attr('data-fastName')); }); 
 #compSec2Block1, #compSec2Block2 { display: inline-block; vertical-align: top; height: 80vh; } #compSec2Block1 { width: 40%; } #compSec2Block2 { width: 60%; } #compSec2Block2inner { width: 100%; height: 100%; } .compProdBlock { width: 50%; height: 50%; display: inline-block; position: relative; border-right: 2px solid #000; box-sizing: border-box; cursor: pointer; } .compProdBlock img { width: 100%; height: 100%; object-fit: cover; } .pTitleWrap { position: absolute; bottom: 0; left: 0; width: 100%; } .boxTitleWrap { background: rgba(0,0,0,.6); width: 100%; } .boxTitle25 { color: #FFF; font-size: 2rem; font-family: 'Muli', sans-serif; font-weight: 400; line-height: 1.4em; padding: 10px 0px 10px 20px; text-transform: uppercase; width: 85%; } 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> <section id="compSec2" class="sec"> <div id="compSec2Block1"> <h3 class="dG" id="fastTitle"></h3> </div><div id="compSec2Block2"> <div id="compSec2Block2inner"> <div class="compProdBlock" data-fastName="Standard Fastener" data-fastImg=""> <img src="https://s.shld.net/is/image/Sears/s_102316_Tools_Holiday_VisualNav_2-qm-$cq_width_250$" alt="Standard Fastener"> <div class="pTitleWrap"> <div class="boxTitleWrap"> <h2 class="boxTitle25">Standard Fastener</h2> </div> </div> </div><div class="compProdBlock" data-fastName="Universal Fastener"> <img src="https://s.shld.net/is/image/Sears/s_102316_Tools_Holiday_VisualNav_2-qm-$cq_width_250$" alt="Standard Fastener"> </div><div class="compProdBlock"> <img src="https://s.shld.net/is/image/Sears/s_102316_Tools_Holiday_VisualNav_2-qm-$cq_width_250$" alt="Standard Fastener"> </div><div class="compProdBlock"> <img src="https://s.shld.net/is/image/Sears/s_102316_Tools_Holiday_VisualNav_2-qm-$cq_width_250$" alt="Standard Fastener"> </div> </div> </div> </section> 

There were 2 issues in your code. 您的代码中有2个问题。 First you created array and that array would not be printed inside <h3> tag. 首先,您创建了数组,该数组不会打印在<h3>标记内。 because it's still an object. 因为它仍然是一个对象。 you can't print that. 你不能打印出来。 and another is after creation on DOM. 另一个是在DOM上创建之后。 Data part will be insensitive from case. 数据部分将不区分大小写。 so if you taking $(this).data('fastName') then it will return undefined. 因此,如果您使用$(this).data('fastName')则它将返回未定义。 you will need to use $(this).data('fastname') 您将需要使用$(this).data('fastname')

 var fastShowName = ''; $('.compProdBlock').click(function () { fastShowName = ''; $('.compProdBlock').each(function () { fastShowName = fastShowName + $(this).data('fastname'); }); console.log(fastShowName); $('#fastTitle').html(fastShowName); }); 
 #compSec2Block1, #compSec2Block2 { display: inline-block; vertical-align: top; height: 80vh; } #compSec2Block1 { width: 40%; } #compSec2Block2 { width: 60%; } #compSec2Block2inner { width: 100%; height: 100%; } .compProdBlock { width: 50%; height: 50%; display: inline-block; position: relative; border-right: 2px solid #000; box-sizing: border-box; cursor: pointer; } .compProdBlock img { width: 100%; height: 100%; object-fit: cover; } .pTitleWrap { position: absolute; bottom: 0; left: 0; width: 100%; } .boxTitleWrap { background: rgba(0,0,0,.6); width: 100%; } .boxTitle25 { color: #FFF; font-size: 2rem; font-family: 'Muli', sans-serif; font-weight: 400; line-height: 1.4em; padding: 10px 0px 10px 20px; text-transform: uppercase; width: 85%; } 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> <section id="compSec2" class="sec"> <div id="compSec2Block1"> <h3 class="dG" id="fastTitle"></h3> </div><div id="compSec2Block2"> <div id="compSec2Block2inner"> <div class="compProdBlock" data-fastName="Standard Fastener" data-fastImg=""> <img src="https://s.shld.net/is/image/Sears/s_102316_Tools_Holiday_VisualNav_2-qm-$cq_width_250$" alt="Standard Fastener"> <div class="pTitleWrap"> <div class="boxTitleWrap"> <h2 class="boxTitle25">Standard Fastener</h2> </div> </div> </div><div class="compProdBlock" data-fastName="Universal Fastener"> <img src="https://s.shld.net/is/image/Sears/s_102316_Tools_Holiday_VisualNav_2-qm-$cq_width_250$" alt="Standard Fastener"> </div><div class="compProdBlock"> <img src="https://s.shld.net/is/image/Sears/s_102316_Tools_Holiday_VisualNav_2-qm-$cq_width_250$" alt="Standard Fastener"> </div><div class="compProdBlock" data-fastName="Standard 32b Fastener"> <img src="https://s.shld.net/is/image/Sears/s_102316_Tools_Holiday_VisualNav_2-qm-$cq_width_250$" alt="Standard Fastener"> </div> </div> </div> </section> 

You need to modify the javascript to get the attribute 'data-fastName' of the div: 您需要修改javascript以获取div的属性“ data-fastName”:

var fastShowName = [];
    $('.compProdBlock').click(function () {
        $('.compProdBlock').each(function () {
            fastShowName.push($(this).attr('data-fastName'));
        });
        $('#fastTitle').html(fastShowName);
    });

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM