JQuery функция запускается после двух кликов

Когда я загружаю страницу selText() запускается только после двух кликов, а затем она работает нормально, но если обновить страницу, мне нужно нажать дважды еще раз

<a href="javascript: selText();" class="select">click</a>
<input type="text"  value="value" />

<a href="javascript: selText();" class="select">click</a>
<input type='text'  value='value' />

<a href="javascript: selText();" class="select">click</a>
<input type="text"  value="value" />




function selText() {
        $(".select").click(function () { $(this).nextUntil("a").select(); });
    }

4 ответа

Решение

Это потому, что когда вы добавляете

function selText() {
    $(".select").click(function () { $(this).nextUntil("a").select(); });
}

и затем нажмите на ссылку привязки, что происходит, в первый раз, когда функция связывает событие щелчка с элементом ".select". Это причина, почему первый клик ничего не делает. Но щелчки после этого будут работать как положено. Нежелательный эффект приведенного выше кода состоит в том, что вы связываете событие click несколькими функциями, которые фактически выполняют одно и то же действие (число связанных функций равно числу раз, когда вы нажимаете тег привязки)

Ответ в том, что вам нужно разместить

$(".select").click(function () { $(this).nextUntil("a").select(); });

под

$(document).ready(function(){
..// your code here
});

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

$(document).ready(function () {
    $(document).on('click', '.tabl-red', function (e) {
        e.preventDefault();
        $(this).nextUntil("a").select();
    });
});

может это кому то поможет

Вставьте свой код в

$(document).ready(function() {
    $(".select").click(function (e) {
        e.preventDefault();
        $(this).nextUntil("a").select();
    });
});

Вы регистрируете обработчик клика, который вызывает select метод обработчика щелчка, чтобы при первом щелчке не было обработчика для выбора элементов, а просто регистрировался обработчик, который будет выполнять выбор. Когда произойдет второй щелчок, у вас будет 2 обработчика для события щелчка один selText и второй обработчик, зарегистрированный первым. Но когда вы делаете третий щелчок select() код будет вызван дважды.

Поэтому в вашем случае решение состоит в том, чтобы удалить встроенный обработчик и зарегистрировать обработчик щелчков в обратном вызове dom ready, как показано ниже.

<a href="#" class="select">click</a>
<input type="text"  value="value" />

<a href="#" class="select">click</a>
<input type='text'  value='value' />

<a href="#" class="select">click</a>
<input type="text"  value="value" />

затем

jQuery(function () {
    $(".select").click(function (e) {
        $(this).nextUntil("a").select();, e.preventDefault()
    });
})
Другие вопросы по тегам