2016-06-18 2 views
-1

Я пытаюсь установить имя и идентификатор элемента при нажатии переключателя. Чтобы избежать дублирования селектора, я попытался настроить его следующим образом:Цепочки функций jquery - Beginner

$("#selectOther").click(function() { 
    $("[field=primaryInput]").attr('id', "modifiedId", function() { 
     $(this).attr('name', "modifiedName"); 
     if ($(this).attr('visible') == "False") { 
      $(this).slideDown('fast'); 
      $(this).attr("visible", "True"); 
     } 
    }); 
}); 

Однако, он не работает. Кажется, что идентификатор изменен, но Имя не является, а остальная часть функции выполнена. Может ли кто-нибудь помочь мне понять, как правильно это выразить?

Адрес JFiddle.

EDIT: В моем последнем случае у меня будет несколько кнопок, которые откроют поле, если оно скрыто, и другие, которые скроют его, если он будет виден. Вот почему я не использую .slideToggle()

+0

Не удосужились ли вы прочитать [документацию] (http://api.jquery.com/attr/)? – Amit

+0

'attr()' принимает один или два аргумента, либо идентификатор атрибута (getter), либо идентификатор атрибута, и значение (setter). Не уверен, что вы ожидаете от этого. Вы могли бы просто сделать что-то вроде: 'var thing = $ (" [field = primaryInput] "); thing.attr ('id', "modifiedId"); thing.attr ('name', "modifiedName"); ... ' – Tibrogargan

+0

Обратите внимание, что изменение атрибутов' id' элементов динамически - не очень хорошая идея. Они призваны быть неизменными. Если вам нужно знать об изменении элемента, используйте буквально любой другой атрибут. Также обратите внимание, что 'field' и' visible' не являются допустимыми атрибутами и будут означать, что ваш HTML недействителен. Чтобы хранить пользовательские метаданные с помощью элемента, используйте атрибут 'data- *': https://developer.mozilla.org/en/docs/Web/Guide/HTML/Using_data_attributes –

ответ

2

Смотреть это fiddle:

$('input[type="radio"]').click(function() { 
    $('input[data="primaryInput"]') 
    .prop('id', this.id) 
    .prop('name', this.name) 
    .val(this.value) 
    .css('display', 'inline-block'); 
}); 

Кол-во пунктов:

  1. Вы не установили внешний ресурс (а именно JQuery) в вашей скрипкой - так вы никогда не получите функции jQuery для выполнения
  2. Используйте атрибут data для пользовательских атрибутов. Вы можете получить к ним доступ так, как я это сделал, или, выбрав $(element).data('field')

Этот пример может помочь вам понять, как работает цепочка. Еще одна рекомендация состоит в том, что цепочка работает только в том случае, если следующий метод получает тот же самый элемент, который возвращает предыдущий метод. Если он когда-либо изменится, вы можете использовать end(), чтобы получить предыдущее состояние.

+0

Обратите внимание, что вы можете значительно упростить код с помощью 'this.id',' this.name' и 'this.value' вместо триггера jQuery для тривиальных данных. –

+0

Хорошая точка, будет работать, чтобы редактировать – Jonathan

+0

@Adam Starrh Обратите внимание на использование prop вместо attr, см. [Prop-vs-attr] (/ questions/5874652/prop-vs-attr) – Tibrogargan

Смежные вопросы