window.name имеет специальную цель и предполагается, что это строка. Кажется, что Chrome явно передал его в строку, поэтому var name = {};
фактически заканчивает тем, что дает глобальную переменную name
(т.е. window.name
) значение "[object Object]"
. Поскольку это примитив, свойства (name.FirstName
) не будут «прилипать».
Чтобы обойти эту проблему, не используйте name
в качестве глобальной переменной.
Не похоже, что существует что-либо встроенное. Но запись расширения не слишком трудна:
$.fn.assertSize = function(size) {
if (this.length != size) {
alert("Expected " + size + " elements, but got " + this.length + ".");
// or whatever, maybe use console.log to be more unobtrusive
}
return this;
};
Использование состоит точно в том, как Вы предполагаете в своем вопросе.
$("#btnSignup").assertSize(1).click(function() {
return validateForm();
);
Примечание, что в его текущей форме функция возвращается успешно, даже если утверждение перестало работать. Что-либо, что Вы объединили в цепочку, будет все еще выполняться. Используйте return false;
вместо return this;
для остановки дальнейшего выполнения цепочки.
Вы, вероятно, хотите http://docs.jquery.com/Traversing/eq#index :
Уменьшают набор подобранных элементов к единственному элементу.
, Если Ваш селектор не возвращает объектов затем, jQuery просто не выполнит цепочечный код, поскольку он не имеет никаких элементов для выполнения их на