Получение значения формы с помощью jQuery

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

Например, сегодня мне нужно было предупредить браузер, если одно из 4 полей было пустым. Два были полями даты, один список выбора и один флажок (бит). Я думал, что вызов $("#formElement").val() получит значение, и в некоторых случаях это так и было, например, в списке выбора после того, как я проанализировал его как целое число. Однако поля даты всегда возвращали пустую строку.

Просматривая HTML-форму CRM, я вижу, что «#formElement» не всегда является идентификатором ввода для элемента формы CRM. Например, поля даты имели ID="DateTime" (или что-то подобное). В этот момент я подумал, что мне нужно будет создать фильтр, который будет принимать таблицу, содержащую #formElement, в качестве ее идентификатора, и искать значение первого ввода в этой таблице, но в этот момент используя crmForm.all.formElement .DataValue просто кажется проще.

Я уверен, что у кого-то здесь есть решение для этого (и, возможно, какое-то объяснение того, как пишутся CRM-формы, чтобы помочь с фильтром), и это действительно воняет, когда невозможно установить надстройки для Internet Explorer здесь, на работе. Спасибо за любую помощь.


person EHorodyski    schedule 27.09.2011    source источник


Ответы (2)


Используйте jQuery, чтобы выбрать саму форму (либо по ее идентификатору, либо просто по $(form)) и затем выполнить итерацию по ее потомкам, которые являются текстовыми полями ввода. Раньше я не делал этого для формы, но это может сработать для вас.

person Primus202    schedule 27.09.2011
comment
Это хорошая идея, но мне пришлось бы вручную знать, какой индекс имеет каждое поле. При более глубоком рассмотрении кажется, что в любом случае он всегда будет попадать в table#formElement input, а ввод может иметь или не иметь собственный идентификатор. Я еще не пробовал - у нас есть огромные файлы JS для наших сущностей (и, честно говоря, для 4 строк кода не стоит вставлять jQuery), но я попробую в своем следующем проекте CRM. - person EHorodyski; 27.09.2011
comment
Вам не нужно делать это вручную. Есть еще один метод jQuery find, который возвращает все дочерние элементы определенного типа. Затем вы можете перебирать их, и каждый идентификатор имеет переключатель для обработки содержимого. - person Primus202; 28.09.2011
comment
Это тоже не сработает. Обычные текстовые поля имеют идентификатор, равный имени элемента формы, но другие текстовые поля (для специальных данных, таких как даты) имеют специальные идентификаторы, которые не соответствуют их имени элемента формы. Я также не мог просто искать ввод table#formElement ›, потому что некоторые из них являются «выбранными». - person EHorodyski; 29.09.2011

Для всех, кто ищет ответ, я понял это в управляемой степени. К сожалению, мне не удалось использовать селекторы CSS для сокращения имен атрибутов, но я смог использовать jQuery, чтобы сократить время. Если вы хотите использовать атрибут CRM 4 с jQuery, это выглядит так:

$(crmForm.all.new_attribute).bind("click", function() { ClickFunction(); });

Чего я действительно добивался, так это цепочки, потому что во многих случаях мне нужно обнулить поле, отключить его, а затем заставить его отправить. Немного магии и это:

crmForm.all.new_attribute.DataValue = null;
crmForm.all.new_attribute.Disable = true;
crmForm.all.new_attribute.ForceSubmit = true;

Становится:

crmForm.all.new_attribute.dataValue().disable().forceSubmit();

Я надеюсь, что это поможет некоторым из вас, ребята!

person EHorodyski    schedule 04.10.2011