Я новичок в Javascript, и я столкнулся с проблемой, когда пытался выполнить «вложенное» событие .click. У меня было несколько btnA, btnB, btnC. Так что я хочу проверить, если

"#btnA" + $ ('form .countryWrapperBorder input') нажал {
предупреждение («А») }

"#btnB" + $ ('form .countryWrapperBorder input') нажал {
предупреждение ("B") }

  $("#btnA").click(function(e) {
    e.stopPropagation();

    $('form .countryWrapperBorder input').one('click', function(e) {
        alert("a");
    //problems goes into here. When i click "#btnB or btnA", it goes into this condition (meaning looping happened
    });
});

 $("#btnB").click(function(e) {
    e.stopPropagation();

    $('form .countryWrapperBorder input').one('click', function(e) {
        alert("b");
    //problems goes into here. When i click "#btnB or btnA", it goes into this condition (meaning looping happened
    });
});

Вопрос: Как я могу перейти в состояние предупреждения ("b"), только если нажата кнопка "#btnB". Я не хочу переходить в сценарий предупреждения («b»), когда нажимается «#btnA». Большое спасибо

-1
Jesscy Tey 17 Янв 2021 в 10:47

2 ответа

Лучший ответ

Не уверен, что это решит проблему, так как не уверен в вашем варианте использования. но вы можете сделать это, установив переменную. Что-то вроде ниже. Я не запускал этот код, код просто для идеи

var clickedId;
 $("#btnA").click(function() {
clickedId = "btnA"
    
});

 $("#btnB").click(function() {
clickedId = "btnB"
    
});

$('form .countryWrapperBorder input').one('click', function(e) {
     if( clickedId == "btnA" )
        alert("a");
     else if( clickedId == "btnB" )   
          alert("b");
    //problems goes into here. When i click "#btnB or btnA", it goes into this condition (meaning looping happened
    });
    

Если хочешь поступать по-своему. Вот что должно сработать

$("#btnA").click(function(e) {
    e.stopPropagation();
$('form.countryWrapperBorder input').off('click');
    $('form.countryWrapperBorder input').on('click', function(e) {
        alert("a");
    //problems goes into here. When i click "#btnB or btnA", it goes into this condition (meaning looping happened
    });
});

 $("#btnB").click(function(e) {
    e.stopPropagation();
$('form.countryWrapperBorder input').off('click');
    $('form.countryWrapperBorder input').on('click', function(e) {
        alert("b");
    //problems goes into here. When i click "#btnB or btnA", it goes into this condition (meaning looping happened
    });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form class="countryWrapperBorder">
  <input type="text"/>
</form>

<button id="btnA" >btnA</button>
<button id="btnB">btnB</button>
0
A Paul 17 Янв 2021 в 08:36

Можете ли вы описать проблему более четко?

На мой взгляд, у вас должно быть так:

$("#btnA").click(function(e) {
    e.stopPropagation();

    $('form .countryWrapperBorder input').one('click', function(e) {
        //alert("a");
    //problems goes into here. When i click "#btnB or btnA", it goes into this condition (meaning looping happened
    });
});

 $("#btnB").click(function(e) {
    e.stopPropagation();

    $('form .countryWrapperBorder input').one('click', function(e) {
        alert("b");
    //problems goes into here. When i click "#btnB or btnA", it goes into this condition (meaning looping happened
    });
});
0
红日初升 17 Янв 2021 в 08:06