我在页面上有一个下拉列表。我使用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
);
答案 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文档很有用。