0

请参见此处的示例。单击[Email Me]总统的标题应该会打开Webmaster从下拉列表中选择的联系表格,但这并没有发生。

我知道这应该是微不足道的,但事实并非如此。get里面的东西email()工作正常,但是当它选择一个option时,代码就会出错。所有相关代码如下。

我的 HTML:

<form method="get">
    <select name="to" id="to-field">
      <option name="President" value="President">President</option>
      <option name="Webmaster" value="Webmaster">Webmaster</option>
    </select>
</form>

我的 JS/jQuery:

function email(to){
    $(document).ready(function() {
         $.get('/inc/email.php', 
               function(data){
                    $('#email-form').html(data);
                    $('#email-form form').submit( function(){
                        var d = $('#email-form form').serialize();
                        $.ajax({
                          type:     'GET',  
                          url:      '/inc/email.php?submit=true&'+d,
                          success:  function(data) {
                                        $('#email-form').html(data);
                          }
                        });
                        return false;
                    });
            }
         );
     });

    if(to !== undefined){
        $('select#to-field').val(to);
        console.log( 'item selected -> ' + $('select#to-field').val() );
    }
}

这是由以下原因触发的:

<span onclick="javascript:email('Webmaster');">[Email Me]</span>

并且console.log()正在返回:

item selected -> undefined

我也试过使用这个选择设置:

$("select#to-field[value=" + to + "]").attr("selected","selected");

甚至这是一个很好的衡量标准:

$("select#to-field[value=" + to + "]").attr("selected",true);

任何帮助将不胜感激!

4

1 回答 1

2

你的 $.get 是一个异步事件!!事实上,你的

if(to !== undefined){
        $('select#to-field').val(to);
        console.log( 'item selected -> ' + $('select#to-field').val() );
    } 

将在内部电子邮件页面甚至完成加载之前执行!将该部分 放入您的 $.get 回调中,以便在电子邮件页面加载后完成!

像这样放在中间

$('#email-form').html(data);
//RIGHT HERE
    if(to !== undefined){
            $('select#to-field').val(to);
            console.log( 'item selected -> ' + $('select#to-field').val() );
        } 
//
$('#email-form form').submit( function(){...
于 2012-09-04T05:46:13.827 回答