jquery Заменить, не работает с 2 кнопками - PullRequest
0 голосов
/ 02 мая 2020

Я создал 2 кнопки, каждая кнопка будет заменять содержимое на основе частичных представлений. Я могу загрузить частичное представление на странице, когда нажимаю кнопку, но это работает только один раз, например, я нажал кнопку 1 и загрузил данные Теперь, если я нажимаю на кнопку 2, она не работает, мне нужно go вернуться на главную страницу, чтобы снова нажать на кнопку-2

    <h3>
       <a class="btn btn-warning" id="button1"> Partial View 1</a>
    </h3> 
    <br/>
    <h4>
        <a class="btn btn-warning" id="buttton2"> Partial view 2</a>
    </h4>
   <br/> <br/>
    <div id="testsim">
    </div>




<script type="text/javascript">
$(function () {
    $('#button1').click(function () {
        $.get('@Url.Action("partialview1", "Home")', function (data1) {
            if (data1) {
                $('#testsim').replaceWith(data);
            }
        });
        });
         $('#button2').click(function () {
             $.get('@Url.Action("partialview2", "Home")', function (data2) {
                 if (data2) {
                     $('#testsim').replaceWith(data2);
                 }
        });
        });


});

</script>

Я пытаюсь добиться нажатия кнопки, чтобы переключаться между двумя кнопки, каждый раз, когда нажатие кнопки должно заменить содержимое в теге div. Любая помощь будет оценена.

1 Ответ

1 голос
/ 02 мая 2020

Я думаю, что проблема в том, что replaceWith() заменяет сам элемент, т.е. outerHTML -

$(function() {
  let $html, current;
  $('#button1').click(function() {
    /* $.get('@Url.Action("partialview1", "Home")', function(data1) {
       if (data1) {
         $('#testsim').replaceWith(data);
       }
     });*/
    current = `button 1 was <em>clicked</em>`;
    $html = `<div><strong>${current}</strong></div>`;
    $('#testsim').replaceWith($html);
  });

  $('#button2').click(function() {
    /*$.get('@Url.Action("partialview2", "Home")', function(data2) {
      if (data2) {
        $('#testsim').replaceWith(data2);
      }
    });*/
    current = `button 2 was <strong>clicked</strong>`;
    $html = `<div><em>${current}</em></div>`;
    $('#testsim').replaceWith($html);
  });


});
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<h3>
  <a class="btn btn-warning" id="button1"> Partial View 1</a>
</h3>
<br/>
<h4>
  <a class="btn btn-warning" id="button2"> Partial view 2</a>
</h4>
<br/> <br/>
<div id="testsim" style="background: aquamarine; height: 200px">
</div>

Как видите, стилизация элемента исчезает после замены. Если вы хотите выполнить эту операцию, вы должны использовать html(), который заменяет только innerHTML -

$(function() {
  let $html, current;
  $('#button1').click(function() {
    /* $.get('@Url.Action("partialview1", "Home")', function(data1) {
       if (data1) {
         $('#testsim').replaceWith(data);
       }
     });*/
    current = `button 1 was <em>clicked</em>`;
    $html = `<div><strong>${current}</strong></div>`;
    $('#testsim').html($html);
  });

  $('#button2').click(function() {
    /*$.get('@Url.Action("partialview2", "Home")', function(data2) {
      if (data2) {
        $('#testsim').replaceWith(data2);
      }
    });*/
    current = `button 2 was <strong>clicked</strong>`;
    $html = `<div><em>${current}</em></div>`;
    $('#testsim').html($html);
  });
});
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<h3>
  <a class="btn btn-warning" id="button1"> Partial View 1</a>
</h3>
<br/>
<h4>
  <a class="btn btn-warning" id="button2"> Partial view 2</a>
</h4>
<br/> <br/>
<div id="testsim" style="background: aquamarine; height: 200px">
</div>

Надеюсь, это поможет вам.

...