Вопрос по jquery, checkbox – Как сделать так, чтобы событие флажка по умолчанию не перекрывало мою функцию проверки / снятия jQuery?

6

У меня есть список флажков внутри таблицы с простой функцией jQuery, которая позволяет пользователю щелкнуть в любом месте строки таблицы, чтобы установить / снять флажок. Это прекрасно работает, кроме случаев, когда пользователь фактически нажимает на флажок. Это не работает тогда. Есть идеи? Вот мой код:

HTML:

<tr onClick="checkBox()">...</tr>

JQuery:

function checkBox() {

var ischecked = $('input#myContacts').attr("checked");

if(ischecked)
{
    $('input#myContacts').attr("checked", false);
}
else
{
    $('input#myContacts').attr("checked", true);
}

return false;
}
где#myContacts флажок плаед? опубликовать подробный HTML Krishanu Dey
@ Джон Андерсон: Александр имеет точку зрения; Здесь есть более одного правильного решения. Если вам нужны дополнительные разъяснения, пожалуйста, попросите об этом, в противном случае примите ответ. Grezzo

Ваш Ответ

4   ответа
0

http://jsfiddle.net/qmdGK/3/ (Использование двух ячеек таблицы, но только привязка к текстовой ячейке)

Решение 2:http://jsfiddle.net/qmdGK/4/ (используя stopPropagation () для события щелчка флажка)

Оба используют jQuery для привязки события к элементу, который является предпочтительным.

0

показывающего, почему эта функция вызвана этим, трудно сказать. Было бы полезно jsFiddle. Просто предположение, но может ли быть так, что вы нажимаете флажок, который проверяет его, но событие click немедленно вызывает ту функцию, которая снимает его?

Также (как ни странно) я не могу заставить ваш код работать, когда js был в окне js на jsFiddle. Это может быть связано с тем, что вы не используете привязку $ (селектор) .click (функция), которая является обычным способом привязки событий к элементам html при использовании jquery. Посмотреть здесь:api.jquery.com/click
Я только что обновил код, чтобы показать, как я вызываю функцию из HTML. John Anderson
У меня закончились персонажи ... Я бы попытался найти решение jsFiddles, но я собираюсь встретиться с кем-нибудь на несколько дней лазания, поэтому у меня нет времени сейчас. Возможно, когда я вернусь этим вечером (по британскому времени), я мог бы пойти, если у вас все еще нет решения.
Вы все еще не показали мне самое важное; Является ли ваш флажок внутри & lt; tr & gt ;. Я уверен, что это так, и это ваша проблема. Смотрите здесь, чтобы проверить, если у меня есть правильная идея:jsfiddle.net/qmdGK , Если я это сделаю, то это именно то, что я предложил выше, тиканье, а затем (из-за вашего сценария) снятие галочки, прежде чем вы сможете увидеть, как оно меняется. Тип исправления, которое вы ищете, - привязать это событие клика к тегу & lt; td & gt; рядом с тегом & lt; td & gt; содержащий ваш флажок, или остановите событие нажатия на & lt; input & gt; пузырится до & lt; tr & gt ;. Чтобы предотвратить пузырение:api.jquery.com/event.stopPropagation
0
   <tr class="checkBox">...</tr>


    $(document).ready(function () {
        $('tr.checkBox').live('click', function (e) {
            if (e.target.type !== 'checkbox') {
                $('input#myContacts').attr("checked", function () {
                    return !$(this).prop('checked');
                });

                //Or

                $(this).find('input#myContacts').attr("checked", function () {
                    return !$(this).prop('checked');
                });
            }
        });
    });
8

event.stopPropagation чтобы избежать вашегоinput#myContactsсобытие щелчка распространяется наtrсобытие клика. Кроме того, я не могу поверить, что вы так смешиваете jQuery и DOM, когда вам следует использовать jQuery Events.

$(document).ready(function(){
  $("input#myContacts").click(function(e){
    e.stopPropagation();
  });
});
Другое решение (с использованием меньшего количества скриптов) состоит в том, чтобы запускать скрипт только при щелчке по метке, а не по всей строке, содержащей флажок.
Большое спасибо за Вашу помощь! Я новичок в JQuery. John Anderson

Похожие вопросы