JQuery устанавливает пустое значение для коллекции текстовых полей - PullRequest
4 голосов
/ 28 декабря 2011

Как мне очистить значения текстовых полей, ниже приведен код, который я разработал, но, похоже, не работает

var txtName = $("input#txtName"),txtPrice = $("input#txtPrice");

Первый метод

$(txtName,txtPrice).val("");
  • это на самом деле неправильно, потому что текстовое поле цены теперь станет контекстом для поиска внутри, я полагаю.

Второй метод

$([txtName,txtPrice]).val("");
  • Я не понимаю, почему я должен это делать, поскольку они уже являются объектами jQuery (но работает)

Я помещаю их в переменные, поскольку они используются далее в сценарии.

Ответы [ 4 ]

11 голосов
/ 28 декабря 2011

Вот несколько способов сделать это;

txtName.add(txtPrice).val("");
// OR
$("input#txtName,input#txtPrice").val("");

(Кстати, в вашем txtPrice входе есть знак $.)

Первый метод не сделалне работает, потому что это способ использования селектора jQuery.Когда вы используете jQuery, первый параметр будет селектором, а второй - контейнерным объектом, в котором работает селектор.По сути, это почти то же самое;

$(txtPrice).find(txtName).val("");

Поскольку в txtPrice нет txtName, ни одно значение не будет очищено.

Второй метод работает, потому что вы задаете параметрыкак массив для селектора jQuery.Он принимает его и выполняет действие .val() для каждого элемента массива.Этот способ допустим, но поскольку ваши переменные уже являются объектами jQuery, нет необходимости использовать это.

1 голос
/ 28 декабря 2011

Учитывая ваши переменные здесь:

var txtName = $("input#txtName"),txtPrice = $("input#txtPrice");

Вы можете напрямую получить доступ к методам jQuery, например, так:

txtName.val("");
txtPrice.val("");

Поскольку они уже объекты jQuery.Нет необходимости пытаться снова обернуть их в функцию $() jQuery.

Насколько я вижу, единственный способ, которым функция jQuery принимает массив, - это когда массивэлементы являются элементами DOM, а не объектами jQuery.(Если он работает с объектами jQuery, которые, по-видимому, не охватываются документом, и когда я попробовал, это не сработало для меня.) Поэтому, учитывая, что вы знаете, что каждый из ваших объектов jQuery имеет только один элемент (потому что вывыбранный по идентификатору), вы можете попробовать это:

$([txtName[0],txtPrice[0]]).val("");

Но все равно будет создан новый объект jQuery, содержащий оба элемента, поэтому он кажется немного избыточным, когда вы можете просто сделать это так, как яупомянуто первым.

(Обратите внимание также, что в вашем селекторе "input # txtName" часть "input" является избыточной, поскольку вы затем выбираете по id, а id является (или должен быть) уникальным на странице.)

РЕДАКТИРОВАТЬ: если у вас был действительно длинный список переменных и вы хотели бы сохранить ввод текста другим способом, это было бы так:

$.each([txtName,txtPrice,txtTest1,txtTest2,txtTest3],function(i,v) { v.val(""); });
1 голос
/ 28 декабря 2011
$('input[type=text]').val('');

или

$('input[type=text]').each(function(){ $(this).val(''); });
0 голосов
/ 28 декабря 2011

Удивительно, что это сработало, $([txtName,txtPrice]).each(function(){this.val("")});

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...