событие щелчка огня для одного элемента в наборе соответствующих элементов, а не для соответствующих элементов - PullRequest
0 голосов
/ 06 июля 2011

Я пытаюсь выяснить, как найти, когда щелкают мой тег привязки, как предотвратить набор совпадающих элементов, чтобы он не срабатывал.Вот мой javascript

//open the dialog box
$('.update').click(function (event) {
     var $target = event.target;
     if ($target == $target) {
    $('.update-form').dialog('open');
    console.log('yep');
     } else {
    console.log('nope');
     }

     return false;
});

Вот HTML

<tbody>
    <tr>
        <th>Designer</th>
        <th>Style</th>
        <th>Color</th>
        <th>Size</th>
        <th>Detials</th>
        <th>Notes</th>
    </tr>
    <tr style="background-color: rgb(201, 201, 201); color: rgb(255, 255, 255); ">
        <td>JASZ COUTURE</td>
        <td>4210</td>
        <td>GOLD</td>
        <td>S</td>
        <td> STRAPPY STETCH COCKTAIL</td>
        <td></td>
        <td><a href="http://localhost:8888/lexsreg/index.php/#" class="update">UPDATE</a></td>

    </tr>
    <tr>
        <td>test</td>
        <td>4as451</td>
        <td>test</td>
        <td>test</td>
        <td>tes</td>
        <td>tes</td>
        <td><a href="http://localhost:8888/lexsreg/index.php/#" class="update">UPDATE</a></td>

    </tr>
</tbody>

Я знаю, что event.target возвращает значение на основе индекса элемента с соответствующим набором.Как мне сказать другим элементам не стрелять.Что происходит, в зависимости от количества тегов привязки с классом обновления, откроет так много модальных окон.Мне нужен только один, а не целая куча

Заранее спасибо!

//set the functions of the dialog box
$('.update-form').dialog({
    autoOpen: false,
    height: 300,
    width: 350,
    modal: true,
    draggable: false,
    resizable: false,
    buttons: {
        'Update': function() {
            //json will happen here
        },
        'Cancel': function() {
            $(this).dialog('close');
        }
    },
    close: function() {
        allFields.val('').removeClass('ui-state-error');
    }
});

Получил решение, которое уродливо, но оно работает. Дайте модальным окнам равные идентификаторы

$updateForm.each(function(index) {
    $(this).attr('id', index);
});

При нажатии пройти событие и получить текущий целевой идентификатор.Пройдите по дереву DOM и найдите модальное окно, идентификатор которого соответствует этому.

//open the dialog box for the rows
$($btns).click(function(event) {
var target = event.currentTarget.id,
 form = $(this)
    .parent()
    .parent()
    .parent()
    .parent()
    .parent()
    .parent()
    .siblings()
    .children()
    .filter('#'+target);
    $(form).dialog('open');
    return false;
});

Ответы [ 2 ]

1 голос
/ 06 июля 2011

Вместо

if ($target == $target) {

try

if ($target == this) {

При вашем подходе это будет справедливо для всех ссылок, что приводит к открытию нескольких модальных линий

0 голосов
/ 06 июля 2011

Вы уверены, что поскольку вы используете класс $ ('. Update-form'). Dialog ('open'); Вы не открываете более одного диалога, потому что в этом классе более одного элемента? Я протестировал ваш код здесь, и он, кажется, работает:

http://jsfiddle.net/aMsbT/1/

РЕДАКТИРОВАТЬ - в отношении вашего комментария, чтобы остановить распространение события, вы должны использовать stopImmediatePropagation () , чтобы знать, какую часть DOM запускает ваше событие, которое вы должны использовать, как вы делаете event.target

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