Как заставить работать jquery и ставить / снимать флажки на IE6? - PullRequest
1 голос
/ 18 декабря 2009

На следующей странице (см. Код в конце), когда я нажимаю на флажок «А», в большинстве браузеров он проходит по горизонтальному правилу и не проверяется. На IE6 это идет по горизонтальному правилу, но проверяется. Я хотел бы иметь такое же поведение в IE6, как и в других браузерах. Я пытался добавить

$(this).attr({"checked":"unchecked"});

но это не лучше. Любое решение?

Вот код страницы:

<html>
<head>

<title>test check</title>

<script src="shoppinglist_fichiers/jquery-1.js"></script>
<script type="text/javascript">

var toggleItem = function(o, toUnbind, toBind){
    var selector = $(o);
    selector.unbind("click", toUnbind);
    selector.bind("click", toBind);
};

var checkItem = function(){
    toggleItem(this, checkItem, uncheckItem);
    //$(this).attr({"checked":"checked"});
    $("#checked").prepend($(this).parent());
};

var uncheckItem = function(){
    toggleItem(this, uncheckItem, checkItem);
    //$(this).attr({"checked":"unchecked"});
    $("#unchecked").append($(this).parent());
};

$(document).ready(function(){
    $("#checked input").bind("click", uncheckItem);
    $("#unchecked input").bind("click", checkItem);
});

</script>

</head>
<body>
<form id="listForm" action="list" method="post">
<span id="checked">

        <span id="A"> 
        <input autocomplete="off" value="A" name="list" checked="checked" type="checkbox">A<br>
        </span>
</span>
<hr/>
<span id="unchecked">

</span>
</form>

</body>
</html>

Ответы [ 4 ]

3 голосов
/ 18 декабря 2009

checked - логический атрибут в XHTML. В то время как в вашем XHTML вы записываете атрибут как checked="checked", javascript предоставляет это свойство как логическое значение element.checked.

Используйте true или false, чтобы установить или снять флажок.

$(this).attr('checked', true);  //Check
$(this).attr('checked', false); //Uncheck

Кроме того, вы также можете удалить атрибут, чтобы снять флажок.

$(this).removeAttr('checked');  //Uncheck

Установка его на недопустимое значение не снимает флажок в IE6 (и, честно говоря, как ни странно, это единственный браузер по спецификации для этого аспекта. Любая строка по-прежнему true против пустой false).

свойство галочки (тип INPUT = флажок, тип INPUT = радио, конструктор HTMLInputElement)

2 голосов
/ 18 декабря 2009

В IE6 используйте свойство defaultChecked.

это должно работать

var checkItem = function(){
 toggleItem(this, checkItem, uncheckItem);
 //$(this).attr({"checked":"checked"});
 $(this).attr({"defaultChecked":true});
 $("#checked").prepend($(this).parent());
};

var uncheckItem = function(){
 toggleItem(this, uncheckItem, checkItem);
 //$(this).attr({"checked":"unchecked"});
 $(this).attr({"defaultChecked":false});
 $("#unchecked").append($(this).parent());
};
0 голосов
/ 18 декабря 2009

Кажется, это ошибка IE6 с флажком + фрагмент документа (фрагмент используется внутренним jQuery при выполнении добавления)

Проверьте эту страницу для описания полного списка несоответствий

DOM & checkbox (проверенный статус)


Хотя я еще не совсем уверен, почему это происходит, вы можете использовать этот метод в Тем временем.

var checkItem = function(){
    var ele = $(this).parent().clone(true);
    toggleItem(ele.find("input").get(0), checkItem, uncheckItem);
    ele.prependTo($("#checked"));
    $(this).parent().remove();
};

var uncheckItem = function(){
    var ele = $(this).parent().clone(true);
    toggleItem(ele.find("input").get(0), uncheckItem, checkItem);
    ele.appendTo($("#unchecked"));
    $(this).parent().remove();
};

кстати. Вы можете сократить свой код (+ избавиться от toggleItem), если используете live

var helper = function(elem, container) {
    var par = $(elem).parent();
    if(container.attr("id") == "unchecked")
        par.clone(true).prependTo(container);
    else
        par.clone(true).appendTo(container);
    par.remove();
}

var checkItem = function(){
    helper(this, $("#checked"));
};

var uncheckItem = function(){
    helper(this, $("#unchecked"));
};

$(document).ready(function(){
    $("#checked input").live("click", uncheckItem);
    $("#unchecked input").live("click", checkItem);
});
0 голосов
/ 18 декабря 2009

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

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