我有一个动态填充用AJAX调用,简单地返回所有HTML选择选项一个选择字段。下面是刚刚Echo的选择标记和动态填写每个选项/值的PHP的一部分。

echo "<select name='player1' class='affector'>";
echo "<option value='' selected>--".sizeof($start)." PLAYERS LOADED--</option>";

foreach ($start as $value) {
    echo "<option value='".$value."'>".$value."</option>";
 }  
  echo "</select>";
}  
填充这个名单

之后,我试图调用一个变化事件,这样无论何时默认选项是在SELECT列表或与同一类的文本字段改变,它禁用单选按钮另一部分设置的形式。 (你可以看到最初的问题,我问来获取工作的此处

$('.affector').change(function(){
       $(this).parents('tr').find('input:radio').attr('disabled', false);
});

由于某些原因,即使我请选择字段的正确的类名(影响器),当我选择在该领域不同的选择,该形式的其他部分不禁用。与同级别的静态文本字段工作正常。我难倒。

任何想法?

有帮助吗?

解决方案

只需在您的最后一个问题......这就是我说:

使用jQuery的结合

function addSelectChange() {
   $('select').bind('change', function() {
       // yada yada
   });
} 

在你的Ajax成功函数调用addSelectChange。它应该做的伎俩。看看jQuery的现场活动也(因为当你想为在以后的项目或某事所有当前和未来的DOM元素的事件)。不幸的是,更改事件和其他几个人都还不支持用活。绑定是下一个最好的事情

其他提示

<子>更最新的答案..

由于元件被动态填充,你正在寻找事件代理

不要使用.live() / .bind() / .delegate(),虽然。您应该使用 .on()

按照 jQuery的API文档

  

对于jQuery 1.7,所述 .on() 方法是优选的方法的事件处理程序附加到一个文档。对于早期版本中, .bind() 方法用于直接连接的事件处理程序到元素。处理程序被附接到在jQuery对象当前选择的元素,因此这些元素必须在点存在调用 <强> .bind()发生 。更灵活的事件绑定,见事件代理在 .on() 讨论。

因此,你会使用这样的:

$(document).on('change', 'select', function (e) {
    /* ... */
});

使用一个例子.live()

$('#my_form_id select[name^="my_select_name"]').live('change', (function () {
    console.log( $("option:selected", this).val());
    })
 );

有关被动态插入到DOM的物品,它们的事件必须被与结合

$('.selector').bind('change',function() { doWork() });

这是因为在运行和$(function(){});结合使用$.click$.change等,要绑定事件元素事件在DOM 已经存在。之后你做任何操作没有得到由$(function(){});调用无论发生什么影响。 $.bind告诉你的网页来寻找你的选择未来元素以及当前的。

尝试.live: http://docs.jquery.com/Events/live

从文档: 结合目前所有的处理程序,以一个事件(像click) - 和未来 - 匹配的元素。还可以结合自定义事件。

我发现作为解决方案,使仅

<select id="myselect"></select> 

在PHP / HTML文件,然后产生由AJAX为它选择:

$.post("options_generator.php", function (data) { $("#myselect").append(data); });

在options_generator.php回声选项只有:

echo "<option value='1'>1</option>";
echo "<option value='2'>2</option>";
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top