AJAX: $ (this) для прослушивателя событий - PullRequest
0 голосов
/ 15 сентября 2018

У меня есть два файла, один из которых содержит HTML и код JavaScript, а другой содержит тексты.Это работает, но только на первом div, потому что я указал его в коде javascript.Теперь я хотел бы отображать текст только по нажатому элементу.Я хотел бы использовать свойство $ (this), но как?

HTML code

<div id="ajax">
    <div>
        <ul>
            <li>list 1</li>
        </ul>
        <a href="" class="link">show</a>
    </div>

    <div>
        <ul>
            <li>Another list</li>
            <li>Another list 2</li>
        </ul>
        <a href="" class="link">show</a>        
    </div>

</div>

<script type="text/javascript">

var btns = document.querySelectorAll('.link');
var username = "username";
var message = "This is my message";

for (var i = 0; i < btns.length; i++) {
    var btn = btns[i];
    btn.addEventListener('click', function(e){
        e.preventDefault();

        var xmlhttp = new XMLHttpRequest();

        xmlhttp.onreadystatechange = function() {
                if(xmlhttp.readyState == 4 && xmlhttp.status == 200) {

                    var li = document.createElement('li');
                    $('#ajax div ul')[0].append(li);
                    document.getElementsByTagName('ul')[0].lastChild.innerHTML = xmlhttp.responseText;
                }
            }

            xmlhttp.open('GET', 'insert.php?username='+username+'&msg='+message, true);
            xmlhttp.send();

    })
}

</script>

1 Ответ

0 голосов
/ 15 сентября 2018

Используйте ваш код Я внес некоторые изменения, надеюсь, это не доставит неудобств:

var username = "username";
var message = "This is my message";

$('.link').click((e) => {
  
  var divContext = $(e.target).parent();
  var xmlhttp = new XMLHttpRequest();
  
  xmlhttp.onreadystatechange = function() {
    if(xmlhttp.readyState == 4 && xmlhttp.status == 200) {

      divContext.find("li:last").after("<li></li>");
      divContext.find("li:last").append(xmlhttp.responseText);
        
    }
  }

  xmlhttp.open('GET', 'insert.php?username='+username+'&msg='+message, true);
  xmlhttp.send();

});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="ajax">
    <div>
        <ul>
            <li>list 1</li>
        </ul>
        <a href="" class="link">show</a>
    </div>

    <div>
        <ul>
            <li>Another list</li>
            <li>Another list 2</li>
        </ul>
        <a href="" class="link">show</a>        
    </div>

</div>

1) Я заменил var btns = document.querySelectorAll('.link'); и btn.addEventListener('click', function(e){ с $('.link').click((e) => {

2) Если вы посмотрите на функцию щелчка, вы увидите эту строку var divContext = $ (e.target) .parent (); , $ (e.target) эквивалентно $ (this) в функции стрелки с jquery. Если вам не нравится функция стрелки, вы можете использовать ее следующим образом:

$('.link').click(function() {

      var divContext = $(this).parent();
      var xmlhttp = new XMLHttpRequest();

      xmlhttp.onreadystatechange = function() {
        if(xmlhttp.readyState == 4 && xmlhttp.status == 200) {

            divContext.find("li:last").after("<li></li>");
            divContext.find("li:last").append(xmlhttp.responseText);

        }
      }

      xmlhttp.open('GET', 'insert.php?username='+username+'&msg='+message, true);
      xmlhttp.send();

});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...