$ ("# myForm"). attr ("action") возвращает элемент формы вместо undefined для форм без действий - PullRequest
3 голосов
/ 12 ноября 2010

У меня есть такой базовый пример:

<!doctype HTML>
<html>
<head>
    <script src="jquery-1.4.2.min.js" type="text/javascript"></script>
    <script>
        $(document).ready(function(){
            $("#showAction").click(function(){
                alert($("#myForm").attr("action"));
            });
        });
    </script>
</head>
<body>
<form id="myForm">
    <input type="text" name="action" value="myAction" />
</form>
<input type="button" value="click me" id="showAction" />
</body>
</html>

Когда вы нажимаете «щелкнуть меня», вы можете увидеть тег

$("#myForm").attr("action"); 

На самом деле не возвращает атрибут элемента.Возвращает дочерний элемент формы с именем «действие».

Это ожидаемое поведение?Это ошибка в JQuery?

Ответы [ 2 ]

9 голосов
/ 12 ноября 2010

Это «ошибка», появившаяся в Netscape давным-давно (ход с головой, IMO), где form.action - это свойство, потому что элемент с этим name является потомком <form>. Так что нет, это не ошибка jQuery, а ошибка JavaScript, в зависимости от вашей точки зрения ... jQuery просто не имеет никаких дополнительных проверок для этих случаев.

Чтобы быть в безопасности, не называйте свои элементы "action" или "submit", так как они также могут связываться с form.submit().

2 голосов
/ 12 ноября 2010

Очень странно. Я собираюсь тихо сказать - ошибка ...

Форма с атрибутом action: http://jsfiddle.net/vMTYY/

Форма без атрибута action: http://jsfiddle.net/ZWWTm/

...