簡體   English   中英

AJAX中的event.target

[英]event.target in AJAX

希望我的問題不太復雜。

function showSkills(event,str) {

    xmlhttp = new XMLHttpRequest();
    xmlhttp.onreadystatechange = function() {
        if (this.readyState == 4 && this.status == 200) {
            event.target.parentElement.parentElement.parentElement.nextElementSibling.innerHTML = this.responseText;
        }
    };
    xmlhttp.open("POST","skills.php",true);
    xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
    xmlhttp.send("q=" + str);
    event.target.parentElement.parentElement.parentElement.nextElementSibling.style.display = "block";
}

該塊已顯示,因此最后一行代碼很好,但是我無法發布$q 我知道問題出在哪里,但我不知道如何解決:如果我將document.getElementById("skills").innerHTML = this.responseText; 而不是event.target.parentElement.parentElement.parentElement.nextElementSibling.innerHTML = this.responseText; 一切正常,但僅適用於<div id="skills'> ,當然不適用於skills2 ,我必須分別將此腳本用於更多的div ID (skills, skills2, skills3)

我的HTML:

<div class="bgimg" style="background-image:url('pic/a3.jpeg');">
  <h3 onclick="displayGrow(event)">bla bla</h3>
  <div id="sport" class="hide resetInput"><?php include 'sport.php'; ?></div>
  <div id="skills" class="hide resetInput"><?php include 'skills.php'; ?></div>
</div><!-- end of the 1st Parallax -->

<div class="bgimg" style="background-image: url('pic/a5.jpg');">
<h3 onclick="displayGrow(event)">bla bla</h3>
<div id="sport2" class="hide resetInput"><?php include 'sport.php'; ?></div>
<div id="skills2" class="hide resetInput"><?php include 'skills.php'; ?></div>
</div><!-- end of the 2nd Parallax -->

sport.php代碼:

<?php
include 'cookies.php';
if ($_SERVER["REQUEST_METHOD"] == "POST") {
  if (isset($_POST['q'])) {
  $q = $_POST['q'];
}}
?>

<div class="dropdown marginTop">
<button><!-- select sport -->
<?php // "select your sport"
    if (isset($q)) {
    $result = mysqli_query($con, 'SELECT ' .$language. ' FROM sports WHERE name1="' .$q. '" LIMIT 1');
    } else {
    $result = mysqli_query($con, 'SELECT ' .$language. ' FROM page WHERE title="selSport1" LIMIT 1');
    }
    $row = mysqli_fetch_row($result);
    print_r($row[0]);
?>
</button>
<div class="dropdown-content">
<?php // sports list
     $sportlist = mysqli_query($con, 'SELECT * FROM sports WHERE title = "sports" ORDER BY ' .$language. ' ASC');
     while ($row = mysqli_fetch_array($sportlist)) {
         echo '
            <button class = "buttonList" value="' . $row[1] . '"';?>
            onclick="showSport(event, this.value); showSkills(event, this.value);" 
            <?php echo ' style="border:0;">' . $row[$language] . '</button>
        ';
     }
?>
</div>
</div>

因此,在調用showSport()之后,在sport.php顯示具有$q值的按鈕。 這對於兩個div ID都適用: sportsport2 另一項功能showSkills()應該打開skill.php<div id="skills"><div id="skills2">和交$q那里。 該部分已打開,但內部沒有$q 有任何想法嗎? 對我有很大幫助。

event.target.parentElement.parentElement.parentElement.nextElementSibling對於我的口味來說,爬上DOM太多了。 當我理解正確時,您可以將相同的功能用作多個元素的事件處理程序。 為什么不只將特定的關聯div的ID作為參數傳遞呢? 我在下面添加一個示例。

 // Note, I do not know what your 'str' is, so here it is just 'foo' document.getElementById('event-div-1').addEventListener('click', showSkills.bind(null, 'skills1', 'foo')); document.getElementById('event-div-2').addEventListener('click', showSkills.bind(null, 'skills2', 'foo')); document.getElementById('event-div-3').addEventListener('click', showSkills.bind(null, 'skills3', 'foo')); function showSkills(skills, event, str) { // Ajax stuff document.getElementById(skills).style.display = 'block'; } 
 .skills { display: none; } 
 <div class="skills" id="skills1">1</div> <div class="skills" id="skills2">2</div> <div class="skills" id="skills3">3</div> <div id="event-div-1">Click me for skills 1</div> <div id="event-div-2">Click me for skills 2</div> <div id="event-div-3">Click me for skills 3</div> 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM