Передача идентификатора в селектор - Jquery - PullRequest
0 голосов
/ 29 января 2012

У меня проблемы с кодом, может быть, вы могли бы помочь?

Jquery: [обновлено]

<script>
$(function() {

     $(".val_error").dialog({
    autoOpen: false,
    show: "blind",
    hide: "explode"
 });
 $(".val_open").click(function(event) {
     var target = $(this).attr("id");
     $('#' + target).dialog('open');
    return false;
 });
    });
</script>

HTML: [обновлено]

<p class="first_name>
<div class="val_error" id="first_name_err"><?php echo form_error('first_name'); ?></div>
<label for="contact_first_name"><?php echo $label_values->first_name;?></label>
<?php echo form_input('first_name', $form_values->first_name, 'id="first_name"');?>
<button class="val_open" id="first_name">Open</button>
</p>

<p class="last_name">
<div class="val_error" id="last_name_err"><?php echo form_error('last_name'); ?></div>
<label for="contact_last_name"><?php echo $label_values->last_name;?></label>
<?php echo form_input('last_name', $form_values->last_name, 'id="last_name"');?>
<button class="val_open" id="last_name">Open</button>
</p>

Так что, в основном, я пытаюсь открыть диалог только для одного идентификатора за раз, а не сразу ... Я попробовал следующее, но безуспешно:

Jquery, я думал, будет работать

<script>
$(function() {

     $(".val_error"+target).dialog({
        autoOpen: false,
        show: "blind",
        hide: "explode"
     });
     $(".val_open").click(function(event) {
            var target = $this.attr("id");
        $(".val_error").dialog("open");
        return false;
     });
    });
</script>

Любая помощь / указатели или даже идеи будут великолепны!

http://jsfiddle.net/dRRRd/ <- можете посмотреть здесь </p>

Ответы [ 2 ]

3 голосов
/ 29 января 2012
  1. Идентификаторы элементов должны быть уникальными - у вас есть два элемента first_name и два элемента last_name.Это вызовет проблемы.(У вас также есть две метки «для» contact_name - есть ли также два элемента с этим идентификатором?)

  2. В вашем javascript target не определяется при вызове $(".val_error"+target).dialog({ (он объявлен в области действия другой функции обратного вызова.)

Вы хотите назначить класс родительскому элементу каждой группы форм, а затем использовать его в качестве селекторачтобы найти ваши ошибки divs.Попробуйте что-то вроде этого:

<p class="first_name">
<div class="val_error" id="first_name_err"><?php echo form_error('first_name'); ?></div>
<label for="contact_name"><?php echo $label_values->first_name;?></label>
<?php echo form_input('first_name', $form_values->first_name, 'id="first_name"');?>
<button class="val_open" id="first_name">Open</button>
</p>

<p class="last_name">
<div class="val_error" id="last_name_err"><?php echo form_error('last_name'); ?></div>
<label for="contact_name"><?php echo $label_values->last_name;?></label>
<?php echo form_input('last_name', $form_values->last_name, 'id="last_name"');?>
<button class="val_open" id="last_name">Open</button>
</p>

И тогда ваш селектор jQuery будет $(".first_name .val_error") или $(".last_name .val_error")

2 голосов
/ 29 января 2012

Пара вещей со следующей строкой:

var target = $this.attr("id");
  1. $this будет искать переменную с именем $this, которая не существует. Чтобы получить контекстный объект jQuery, используйте $(this)
  2. Переменная target никогда не читается - может быть, вы имели в виду $('#' + target).dialog('open'); на следующей строке?

Но самое простое решение, вероятно, состоит в том, чтобы удалить:

var target = $this.attr("id");
$(".val_error").dialog("open");

.. и заменить его на:

$(this).dialog('open');

потому что только один элемент получает событие click в любом случае, и этот элемент может быть нацелен на $(this).

...