0

所以,我有一个动态生成的 SELECT,它是从 PHP-mySQL 表中填充的。我还有一个用于选择的 on change 事件,它处理用户更改页面上选定值的时间。当更改事件被触发时,我使用来自该选择选项的值填充 3 个输入框。

一切正常,除了当我使用 SELECT 进入(或刷新)页面时,SELECT 被填充,但 onChange 事件不会触发。实际上,我确信 onchange 会被触发,但这是在 SELECT 填充之前发生的,因此没有可提供的值。我能做些什么?从 php正确填充 SELECT后,如何调用更改事件?

我的 onChange 代码是:

$(document).ready(function(){
    $('#myselect').change(function(){
      var selected = $(this).find('option:selected');
      $('#pux').val(selected.data('foo'));
    }).change();
});

所以基本上,我想要一个带有 name 和 id = pux的输入来填充 select 选项的 data-foo 值。我的意思是,选择的选项结构是这样的:

<option id="1" value="whatever" data-foo="something_important">First option</option>

当然目标输入框是:

<input type="text" name="pux" id="pux" value="0" />

就像我说的:该事件在手动更改选择时效果很好,但是在页面显示(document.ready)上,pux 输入框设置为空...为空...我希望能够获得更改事件填充选择后触发。因为,在选择被填充后,选择框会自动选择第一个选项并显示它

  • 我尝试使用 $(document)。on("change" , function()... 在 document.ready 之外,但没有变化

  • 我还尝试在从 php 填充 SELECT 之后立即设置输入的值,但 id 似乎不起作用。要么我把代码放在错误的地方,要么我不知道该怎么想了......

我调用 php 以填充它的代码是:

$('#myselect').toggle('fast', function(){
  $(this).html(ajaxloader);
  $(this).toggle('fast', function(){
    $.get(loadurl, function(data){
      $('#myselect').html(data);
      $('#myselect').selectmenu("refresh",true);
    },'html');
// and here I placed my assignment
    var selx  = $('#myselect').find('option:selected');
    $('#pux').val(selx.data('foo'));
  });
});

依然没有...

任何帮助,将不胜感激。谢谢

4

1 回答 1

1

从您的问题来看,动态填充选择列表似乎不会调用 change() 事件。因此,您可能需要考虑将更改事件处理程序提取到单独的过程中:

function populatePux() {
  var selected = $('#myselect option:selected');
  $('#pux').val(selected.data('foo'));
}

$(document).ready(function(){
    $('#myselect').change(populatePux);
});

然后,您可以populatePux()在填充 #myselect 后立即在用于该特定进程的函数中运行。

于 2013-07-10T22:14:51.233 回答