【问题标题】:How can i display a information to a overlay div "onclick"如何向覆盖 div“onclick”显示信息
【发布时间】:2020-04-08 10:09:35
【问题描述】:

信息:我有一个表,存储了每个工人的以下信息(姓名,简短描述,人物形象,公司职位(如 CEO,项目经理,开发人员)社交网络链接:Github,Linkedin,Xing ,脸书)。

php:我有一个名为 wrapper 的 div 父级,在里面我有 2 个子 div(一个用于带有工人信息的表,第二个 div(class="info") 的想法是用信息覆盖表选定的工人。)

$query = new WP_Query( $args );
if ($query->have_posts()) :

    echo '<div class"wrapper"><div><table >';
    echo  '<tr>
    <th>NAME</th>
    <th>IMAGE</th>
    <th>POSITION</th>
    <th>MORE INFO</th>
  </tr>';
    while ($query->have_posts()) : $query->the_post();
    $name = get_post_meta( get_the_ID(), '_overview_worker_key', true )['name'] ?? '';
    $image = get_post_meta( get_the_ID(), '_overview_worker_key', true )['image'] ?? '';
    $position = get_post_meta( get_the_ID(), '_overview_worker_key', true )['position'] ?? '';
    $description = get_post_meta( get_the_ID(), '_overview_worker_key', true )['description'] ?? '';
    $Linkedin = get_post_meta( get_the_ID(), '_overview_worker_key', true )['Linkedin'] ?? '';
    $github = get_post_meta( get_the_ID(), '_overview_worker_key', true )['github'] ?? '';
    $xing = get_post_meta( get_the_ID(), '_overview_worker_key', true )['xing'] ?? '';
    $facebook = get_post_meta( get_the_ID(), '_overview_worker_key', true )['facebook'] ?? '';
    echo '<tr class="ov-worker--table" ><td>'.$name.'</td><br/><td>'.$image.'</td><br/><td>'.$position.'</td><br/><td><button type="button"  onclick="populateOverlay('.$name.','.$description.','.$facebook.')">More Info!</button></td></tr>';
    endwhile;
    echo '</table>
    <div id="info"></div>
    </div></div>';


endif;
wp_reset_postdata();

scss:

.wrapper {
    position: fixed;
    display: none;
    width: 100%;
    height: 100%;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    //z-index: 2;
}
#info {
    display: none;
    position: absolute;
    width: 25%;
    height: 25%;
    top: 0;
    right: 0;
    font-size: 12px;
    color: rgb(128, 20, 20);
    background-color: rgba(119, 107, 107, 0.5);
}

js:

function populateOverlay(name, desc, social) {

    var overlay = document.getElementById("info");
  overlay.style.display = "block"; 
  overlay.innerHTML = "<div>"+name+"</div><div>"+desc+"</div><div>"+social+"</div>"; 

} 

function off() {
    var overlay= document.getElementById("info");
  overlay.style.display= "none";
} 

问题:单击时,我在我的 google chrome 控制台中收到以下错误(参数列表后未捕获 SyntaxError:缺少)。当我点击错误时,这就是它的来源

  </tr><tr class="ov-worker--table" ><td>LUKO</td><br/><td></td><br/><td>Cleaner</td><br/><td><button type="button"  onclick="populateOverlay(LUKO,he does notihng,NONE)">More Info!</button></td></tr><tr class="ov-worker--table" ><td>AMINE</td><br/><td>carlomagno.PNG</td><br/><td>CEO</td><br/><td><button type="button"  onclick="populateOverlay(AMINE,TRAVAJADOR,NONE)">More Info!</button></td></tr><tr class="ov-worker--table" ><td>Juan</td><br/><td>fotoperfil.jpg</td><br/><td>Cleaner</td><br/><td><button type="button"  onclick="populateOverlay(Juan,he does notihng,NONE)">More Info!</button></td></tr><tr class="ov-worker--table" ><td>ryan gold</td><br/><td></td><br/><td>PNP</td><br/><td><button type="button"  onclick="populateOverlay(ryan gold,another worker in the room,NONE)">More Info!</button></td></tr><tr class="ov-worker--table" ><td>Andrew</td><br/><td>IMG_20190909_171228.jpg</td><br/><td>CEO</td><br/><td><button type="button"  onclick="populateOverlay(Andrew,The hardest worker in the room,https://www.facebook.com/andrew.9?ref=bookmarks)">More Info!</button></td></tr></table>

最后,错误显示 populateOverlay 未定义,当我单击任何(更多信息按钮)时会出现此错误,如果当我单击按钮时,它会将每个工作人员的信息提交给按钮。可能是因为while循环??。

【问题讨论】:

    标签: javascript php sass


    【解决方案1】:

    我会先编写一个 JavaScript 函数来填充覆盖:

    function populateOverlay(name, desc, social) {
        var overlay = document.getElementsByClassName("info");
        overlay.innerHTML = "<div>"+name+"</div><div>"+desc+"</div><div>"+social+"</div>";
    }
    

    然后我会更改按钮的 onclick 事件来触发这个新功能。所以从这里改变:

    echo '<tr id="ov-worker--table" ><td>'.$name.'</td><br/><td>'.$image.'</td><br/><td>'.$position.'</td><br/><td><button type="button">More Info!</button></td></tr>';
    

    到这样的事情:

    echo '<tr class="ov-worker--table" ><td>'.$name.'</td><br/><td>'.$image.'</td><br/><td>'.$position.'</td><br/><td><button type="button" onclick=javascript:populateOverlay("'.$name.'","'.$description.'", "'.$facebook.'")>More Info!</button></td></tr>';
    

    请注意,我已将 id="ov-worker--table" 更改为 class="ov-worker--table",因为您应该只有您页面上任何 ID 的一个实例,而不是多个副本。

    我刚刚在我的代码中选择了 Facebook 作为示例,但您也可以添加 LinkedIn、Github 和 Xing(也许先添加一些逻辑来检查它们是否已被填写)。

    【讨论】:

    • 由于某种原因没有任何效果,而且我厌倦了在开始时隐藏叠加层,所以它只在单击按钮时显示,但它只出现在前端并且像挂钩程序一样。我也在 js 文件上试过这个但没有结果function populateOverlay(name, desc, social) { var overlay = document.getElementsByClassName("info").style.display = "block"; overlay.innerHTML = "&lt;div&gt;"+name+"&lt;/div&gt;&lt;div&gt;"+desc+"&lt;/div&gt;&lt;div&gt;"+social+"&lt;/div&gt;"; overlay.display = block; } function off() {overlay= document.getElementsByClassName("info").style.display= "none";}
    • 啊,我是在深夜写的,所以可能有一些语法错误。我已经整理了一个可以工作的 JS Fiddle,我认为这就是您正在寻找的:jsfiddle.net/0mwfzve1/7
    • 首先感谢您抽出宝贵时间,这是一个非常好的提示。但又遇到了另一个问题。在您的示例中,每一行都有一个按钮。在我的情况下,当自定义元框是字段时会生成一行。我已经稍微编辑了问题以显示问题所在。但你的帮助肯定是我工作的升级。
    猜你喜欢
    • 2019-07-13
    • 2022-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-27
    相关资源
    最近更新 更多