Считывать данные в jquery, только если они находятся в определенном div

#jquery

#jquery

Вопрос:

У меня есть

 if ($('#logincap').length) // see if login cap exists or not
{
    challengeField = $("input#recaptcha_challenge_field").val();
    responseField = $("input#recaptcha_response_field").val();
}
else
{
    challengeField = "nope";
    responseField = "nope";
}
  

Я хочу, чтобы они считывались только из div с именем «logincap». Таким образом, в dom может быть несколько recaptcha_challenge_field и recaptcha_response_field .

Я знаю, как выполнять проверку и прочее в php. если php читает что-либо другое, то nope, он попытается проверить captcha с помощью Google, иначе проверьте, является ли учетная запись «доверенной». Итак, я просто выделил эту часть, чтобы вы могли на нее взглянуть. Знаете ли вы, что мне пришлось бы изменить, чтобы они считывались из «logincap» recaptcha_response_field и recaptcha_challenge_field ?

Ответ №1:

Я делаю предположение, что у вас есть #logincap div, обтекающий поля #recaptcha_{challenge,response}_fields , поэтому не было бы самым простым решением настроить таргетинг на правильные поля, используя как #logincap, так и поля recaptcha, например:

 if ($('#logincap').length) // see if login cap exists or not
{
    challengeField = $("#logincap > input#recaptcha_challenge_field").val();
    responseField = $("#logincap > input#recaptcha_response_field").val();
}
else
{
    challengeField = "nope";
    responseField = "nope";
}
  

Или я упускаю что-то очевидное?

На совершенно другом примечании: я не думаю, что было бы допустимо в html обслуживать более одного элемента с одинаковым идентификатором (т. Е. несколько элементов, идентифицированных как recaptcha_{challenge,response}_field)

В любом случае, надеюсь, это поможет 🙂

Ответ №2:

На самом деле этот вопрос сформулирован не особенно удачно, но я собираюсь попытаться понять, что, как я думаю, вы имеете в виду.

Вы можете сузить поле выбора jQuery, используя контекст. Context — это раздел вашего DOM, который вы можете использовать в качестве необязательного аргумента при любых дальнейших выборках jQuery.

Например:

 var context = $('#myElement')[0];
  

Теперь я могу запрашивать другие элементы DOM в узле «myElement» следующим образом:

 $('table', context).show();
  

Это гарантировало бы, что jQuery будет искать элементы таблицы только внутри узлов, содержащихся в моей контекстной переменной (в данном случае «myElement»).

Итак, чтобы ответить на ваш вопрос (надеюсь), вы бы задали контекст, подобный этому:

 var context = $('#logincap')[0];
  

Затем вы могли бы запросить свои поля следующим образом:

 $('input#recaptcha_challenge_field', context').val();
  

Теперь: обязательное предупреждение. В любом случае вам не следует использовать несколько идентификаторов в вашем DOM. Каждый атрибут ID для ваших элементов должен быть уникальным. Рассмотрите возможность использования атрибута name, если вы хотите ссылаться на одно и то же значение в нескольких элементах, или рассмотрите возможность использования вместо него суффиксов типа #recaptcha_challenge_field-1 .