Почему я не могу включить и снять отметку с элемента jQuery? - PullRequest
0 голосов
/ 26 февраля 2012

Я хочу включить и установить check = false, редактируя этот код?

if (confirm('This widget will be removed, ok?')) {
    $(​'table tr input[type=hidden]').filter(function() {
        return $(this).val()​​​​​ == widgetId;
    }).siblings('input[type=checkbox]').attr({disabled: true, checked: true});

Я пытаюсь:

.siblings('input[type=checkbox]').removeAttr('disabled');

и это.но напрасно


РЕДАКТИРОВАТЬ 1:

<table><colgroup><col title="process name"></colgroup> <tbody><tr><td><input name="rlv_mainservices$ctrl0$hf_id" id="rlv_mainservices_ctrl0_hf_id" value="91" type="hidden"> <input id="rlv_mainservices_ctrl0_chb_sys" name="rlv_mainservices$ctrl0$chb_sys" type="checkbox"> <span id="rlv_mainservices_ctrl0_lbl_main_sys">pro1</span> </td></tr></tbody></table><table><colgroup><col title="processname"> </colgroup><tbody><tr><td><input name="rlv_mainservices$ctrl1$hf_id" id="rlv_mainservices_ctrl1_hf_id" value="92" type="hidden"><input id="rlv_mainservices_ctrl1_chb_sys" name="rlv_mainservices$ctrl1$chb_sys" type="checkbox"> <span id="rlv_mainservices_ctrl1_lbl_main_sys">pro2</span> </td></tr></tbody></table>

Я хочу включить input type = "checkbox", если значение типа input = "hidden" существует в том же<td> равно идентификатору li (виджет). Это когда пользователь нажимает закрыть.

Ответы [ 4 ]

1 голос
/ 26 февраля 2012

Мне интересно, это где-то рядом с тем, что ты пытаешься сделать. Мне нужно было придумать какую-то временную разметку, и я понятия не имею, откуда взялся widgetId. Тем не менее, этот эффект вам нужен?

РЕДАКТИРОВАТЬ - Я не совсем уверен, что здесь делает widgetId, и мой исходный код игнорировал его, поэтому я изменил код так, чтобы он запускал клик input:button, который будет манипулировать это братья и сестры.

Пример HTML

<table>
    <tr>
        <td>
            <label>Checkbox <input type="checkbox" value="test1"/></label>
            <input type="hidden" value="widget"/>
            <label>Checkbox <input type="checkbox" value="test2"/></label>
            <label>Checkbox <input type="checkbox" value="test3"/></label>
            <input type="button" class="check" value="Check"/>
        </td>
    </tr>
    <tr>
        <td>
            <label>Checkbox <input type="checkbox" value="test1"/></label>
            <input type="hidden" value="widget"/>
            <label>Checkbox <input type="checkbox" value="test2"/></label>
            <label>Checkbox <input type="checkbox" value="test3"/></label>
            <input type="button" class="check" value="Check"/>
        </td>
    </tr>
    <tr>
        <td>
            <label>Checkbox <input type="checkbox" value="test1"/></label>
            <input type="hidden" value="widget"/>
            <label>Checkbox <input type="checkbox" value="test2"/></label>
            <label>Checkbox <input type="checkbox" value="test3"/></label>
            <input type="button" class="check" value="Check"/>
        </td>
    </tr>
</table>

JQuery

$('.check').click(function(){
    var $td = $(this).parent('td');

    if (!confirm('This widget will be removed, ok?')) {
        $td.find(':checkbox').prop({disabled: true, checked: true});
    } else {
        $td.find(':checkbox').prop({disabled: false, checked: false});
    }
});

http://jsfiddle.net/SPVPx/1/

РЕДАКТИРОВАТЬ 2

Другой пример, использующий input:button s, не входящий в table.

HTML

<input type="button" class="check" value="Remove Widget 1" data-widget-id="widget1"/>
<input type="button" class="check" value="Remove Widget 2" data-widget-id="widget2"/>
<input type="button" class="check" value="Remove Widget 3" data-widget-id="widget3"/>
<table>
    <tr>
        <td>
            Widget 1:
            <label>Checkbox <input type="checkbox" value="test1"/></label>
            <input type="hidden" value="widget1"/>
            <label>Checkbox <input type="checkbox" value="test2"/></label>
            <label>Checkbox <input type="checkbox" value="test3"/></label>
        </td>
    </tr>
    <tr>
        <td>
            Widget 2:
            <label>Checkbox <input type="checkbox" value="test1"/></label>
            <input type="hidden" value="widget2"/>
            <label>Checkbox <input type="checkbox" value="test2"/></label>
            <label>Checkbox <input type="checkbox" value="test3"/></label>
        </td>
    </tr>
    <tr>
        <td>
            Widget 3:
            <label>Checkbox <input type="checkbox" value="test1"/></label>
            <input type="hidden" value="widget3"/>
            <label>Checkbox <input type="checkbox" value="test2"/></label>
            <label>Checkbox <input type="checkbox" value="test3"/></label>
        </td>
    </tr>
</table>

JQuery

// For testing only.
$(':checkbox').prop({disabled: true, checked: true});

$('.check').click(function(){
    var id = $(this).data('widget-id'),
        $td = $('table tr td input:hidden').filter(function(){
            return this.value == id;
        }).parent('td');

    if (confirm('This widget will be removed, ok?')) {
        $td.find(':checkbox').prop({disabled: false, checked: false});
    } else {
        $td.find(':checkbox').prop({disabled: true, checked: true});
    }
});

http://jsfiddle.net/SPVPx/2/

1 голос
/ 26 февраля 2012

Попробуйте использовать prop вместо attr: http://api.jquery.com/prop/

.siblings('input[type=checkbox]').prop({"disabled": false, "checked": false});
1 голос
/ 26 февраля 2012

На самом деле вы можете сделать это с помощью jQuery.

Чтобы включить

$('#element').removeAttr('disabled');

Чтобы снять отметку

$('#element').removeAttr('checked');

Или даже объединить их

$('#element').removeAttr('disabled').removeAttr('checked');

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

Если вы используете так и позже, попробуйте .removeProp( propertyName ) [документы здесь] вместо.

$('#element').removeProp('disabled').removeProp('checked');

Обновление

  • Обновление 1: Работает.Проверьте демо здесь .

  • Обновление 2: Я также смоделировал манипуляцию и создал другую скрипку, используя .removeProp (), отметьте ее здесь

  • Обновление 3: Хорошо, проверьте это обновление .Если он совместим с вашей разметкой, вам, возможно, придется использовать правильный селектор.Тем не менее, это даст вам полную идею.

1 голос
/ 26 февраля 2012

попробуйте

$(​'table tr input[type="hidden"][value="'+widgetId+'"]')
       .siblings(':checkbox').attr("disabled": false).attr("checked": false);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...