选择更改事件中的问题
问题描述:
我在页面上有一个下拉列表。我使用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代码也针对此更改事件执行。现在在两个下拉列表中执行更改事件。 而我希望它只能在第一个下拉列表中执行,该列表中有一个名称“标题”。
任何一个谁可以解决我的问题......
编辑:
$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
);
答
jQuery的.change()
事件被绑定到选择器匹配的所有元素的$form
对象被任何$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文档有用。
您可以添加您使用的PHP'$ form'对象,以便可以确定正确的选择器吗? – andyb 2011-04-27 12:37:06
这是我的表单代码。
$form = array(); $form['title'] = array( \t '#type' => 'select', \t '#title' => t('Select a forum'), \t '#page callback' => 'drupal_get_form', \t '#page arguments' => array('test_select'), \t '#access callback' => TRUE, \t '#options' => $options, \t );
– Ahmad 2011-04-28 04:44:34