Является ли «действие» ключевым словом в jQuery? - PullRequest
1 голос
/ 23 декабря 2009

У меня была проблема с jQuery, так как я не смог найти элемент <form> в моем HTML за последние полтора дня. Я несколько раз запускал свой HTML-код через валидаторы, проверял мои JS и CSS и даже удалял ненужные файлы JS и CSS, которые теперь сводятся к следующему:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">

<html>
<head>
    <title>Test</title>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
    <link rel="stylesheet" type="text/css" href="http://yui.yahooapis.com/2.8.0r4/build/reset/reset-min.css" />
</head>

<body>
    <form>
        <input type="textbox" name="action" value="view"></input>
        <button>Test</button>
    </form>
</body>
</html>

После того, как я сократил свой HTML до «голых костей», я проверил, может ли jQuery просто получить элемент <form>, используя $('form'). Ну, jQuery ничего не вернул. Это полностью вывернуто. Он ничего не возвращал, даже объект jQuery. Итак, снова я продолжил свое безумие, проверяя HTML и т. Д. И т. Д., И все еще ничего!

Я переписал HTML второй раз, но не совсем так, и это сработало! Поэтому я разложил два файла и начал подправлять исходный файл, чтобы постепенно стать идентичным новому файлу, который я только что написал. Что ж, получается, что значение атрибута name было виновником, который все испортил! Простое изменение значения на значение, отличное от action, позволило jQuery наконец-то получить элемент <form>! В самом деле?! ! @ # $% @ # !!!

Итак, мои вопросы: Является ли action ключевым словом в jQuery и как значение атрибута портит все?

Если это ключевое слово, и вы не хотите объяснять почему, не могли бы вы указать мне на документацию по этому вопросу, чтобы я мог ударить себя по голове после прочтения. Все еще кажется довольно странным, что значение атрибута испортило бы ситуацию, но это, вероятно, потому, что я не знаю о реализации jQuery. =)

Ответы [ 6 ]

1 голос
/ 23 декабря 2009

Не могу воспроизвести вашу проблему

Проверить этот сайт http://jsbin.com/ixixu3

alert всегда показывает 1 для всех различных селекторов (протестировано в Opera 10.10, IE6, FF 3.5.6)

1 голос
/ 23 декабря 2009

Если я правильно помню, в Internet Explorer (6) могут возникнуть проблемы, если вы используете name = "action". Почему-то действие - зарезервированное слово. Не помню последствия мысли, но вещи не сработали. Поэтому, если вы работаете в MSIE, попробуйте другой браузер.

1 голос
/ 23 декабря 2009

Я просто скопировал / вставил ваш пример кода и добавил

<script type="text/javascript">
    jQuery('form').html('It works fine');
</script>

… после элемента формы. Содержимое формы было заменено на «Работает нормально», поэтому нет , у jQuery такой проблемы нет.

1 голос
/ 23 декабря 2009

Является ли действие ключевым словом в jQuery и как значение атрибута все портит?

Нет, это не так. Ваша проблема лежит где-то еще. Возможно, вы пытаетесь получить форму прямо в HTML-заголовке, вместо того, чтобы ждать окончания загрузки страницы.

например. ты сделал

<script>
    alert($('form').length); // May return 0 depending on the browser used.
</script>
...
<form>
    ...
</form>

вместо

<script>
    $(document).ready(function() {
        alert($('form').length); // Always returns 1.
    });
</script>
...
<form>
    ...
</form>
0 голосов
/ 24 декабря 2009

Спасибо за всю информацию всем. Я должен был упомянуть, что я использую FF3.5 и тестирую с помощью Firebug Console. Я бы загрузил страницу и затем выполнил $('form') в Firebug. Он ничего не будет возвращать каждый раз, когда для атрибута name установлено значение action. После его замены на что-то другое, выполнение той же строки кода в консоли Firebug будет работать.

После прочтения всех сообщений я отредактировал свой HTML, добавив элемент <script> в раздел <head>:

<head>
    <title>Test</title>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
    <link rel="stylesheet" type="text/css" href="http://yui.yahooapis.com/2.8.0r4/build/reset/reset-min.css" />
    <script type="text/javascript">
        $(function(){
           alert($('form').length); 
        });
    </script>
</head>

Это сработало совершенно нормально. Поэтому я предполагаю, что моя ошибка была в моих методах тестирования. Использование $('form').length в консоли Firebug ничего не дает. Что я должен был использовать вместо этой строки: $(function(){$('form');}); $ (function () {$ ('form');}) `Я не думал, что мне нужно будет проверять, готов ли документ, прежде чем пытаться выбрать форму элемент, использующий консоль Firebug; Я был не прав.

МОРАЛЬ ИСТОРИИ: Даже в Firebug вам все равно нужно проверить, готов ли документ, прежде чем выбрать элемент.

Что меня все еще беспокоит, так это то, что когда атрибут name равен , а не action, тогда мой оригинальный метод тестирования работает с консолью Firebug. Поэтому, возможно, реальный вопрос должен был звучать так: Что такое говядина в Firebug со значением action для атрибута name для элемента <input>? Что ж, мы сохраним это в другой раз.

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

0 голосов
/ 23 декабря 2009

ДЕЙСТВИЕ - обязательный атрибут тега FORM.

EDIT

Ваш приведенный пример не является допустимым HTML. Попробуйте:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
    <title>Test</title>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
    <script type="text/javascript">
    $(document).ready(function() {
        $('form').css({"border":"1px solid red"});
    });
    </script>
</head>
<body>
    <form action="">
    <fieldset><legend>Test</legend>
        <input type="text" name="action" value="view"/>
        <button>Test</button>
        </fieldset>
    </form>
</body>
</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...