选择更改事件中的问题

时间:2011-04-27 11:57:43

标签: jquery drupal-6

我在页面上有一个下拉列表。我使用jquery在此下拉列表中实现更改事件,并且其工作正常。这是我的jquery代码。

drupal_add_js('$(document).ready(
        $('.$form['title']['select'].').change(function () {
    var str = "";
        var date = "";
    $("'.$form['title']['select'].' option:selected").each(function () {
      str += $(this).text() + " ";
      date += this.value + " ";
            $("#edit-titletext").val(str);
            $("#edit-datetext").val(date);

    });

  })
    )
  .change();', 'inline', 'header');

其中title是字段名称,select是其类型。 titletext和datetext是文本框的字段名称。我的代码工作正常。

但是在同一个页面上我放置了一个具有另一个下拉列表的块。现在,当我更改块的下拉列表中的值时,该jquery代码也会针对此更改事件执行。现在,在两个下拉列表中都执行了更改事件。 我希望它只在名为'title'的第一个下拉列表中执行。

任何能解决我问题的人......

修改: $form对象

$form = array();
$form['title'] = array(
    '#type' => 'select',
    '#title' => t('Select a forum'),
    '#page callback' => 'drupal_get_form',
    '#page arguments' => array('test_select'),
    '#access callback' => TRUE,
    '#options' => $options
);

1 个答案:

答案 0 :(得分:0)

jQuery .change()事件绑定到与$form['title']['select']等同于生成的选择器匹配的所有元素。

因此,如果$form['title']['select'] = .mySelect,那么结果声明将是:

$('.mySelect').change(function() {...});

因此将更改函数()绑定到与CSS类.mySelect匹配的任何元素。

因此,如果我假设您的$form对象被称为myForm,那么以下内容应该将事件仅绑定到CSS选择器select[name="title"]

$('select[name="'.$form['myForm']['#title'].'"]').change(function () {...});

编辑:我不确定哪个部分你不理解。您的问题不完整,所以我为您提供了足够的信息,以便您能够自己解决问题。除此之外,您应该只需要将jQuery选择器更改为:

$('select[name="title"]').change(...

$('select[name="title"] option:selected').each(...

因为已经知道<select>的名称所以为什么不用它来代替呢?

此外,我认为您可能会发现jQuery selectors文档很有用。