JQuery формы ввода счетчик отличается в IE - PullRequest
1 голос
/ 18 ноября 2010

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

<!DOCTYPE html 
 PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <title>IE Test</title>
    <meta name="description" content="" />
    <meta name="keywords" content="" />
    <meta name="author" content="" />
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js" type="text/javascript"></script>

    <script type="text/javascript">
        $(document).ready(function(){
            alert($('form :input').length);
        });
    </script>
</head>
<body>      
    <div id='wrapper'>
        <div id='header'>
            <form action='#' method='POST'>
                <input type='text' name='title' value='Hotdog Fanatic'></input>
            </form>
        </div>
    </div>

</body>

IE 6/7/8 все дают мне результат 2, в то время как FF, Chrome, Opera и Safari все считают 1 соответствующий элемент.

Если я изменю селектор на фильтр по какому-либо атрибуту, счет будет правильным. Например, form :input[name] или form :input[type] в качестве селектора возвращает только один соответствующий элемент в IE.

Кто-нибудь знает, почему это может быть?

Спасибо!

БАТ.

Ответы [ 2 ]

6 голосов
/ 18 ноября 2010

Удалите конечный тег </input>.
Вместо этого вы должны создать самозакрывающийся тег:

<input type='text' name='title' value='Hotdog Fanatic' />

Измените свой сценарий на

<script type="text/javascript">
    $(document).ready(function(){
        alert($('form :input')[1].outerHTML);
    });
</script>

Это предупредит</INPUT>.

1 голос
/ 18 ноября 2010

Элементы ввода не являются контейнерами, если вы используете строгий XHTML, замените его следующим:

<input type='text' name='title' value='Hotdog Fanatic' />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...