返回false后,jqueryui对话框按钮将不起作用

时间:2012-10-15 17:49:13

标签: jquery-ui-dialog

目标:提交前的表单验证

过程:当用户单击“确定”时,表单验证代码将运行。如果有任何空的input字段,则返回false。到目前为止,这一切都有效。

问题:如果返回false,则下一个okay或关闭按钮无法访问对话框中显示/编辑的输入框的值。警报有效,但javascript会在尝试获取input元素的值时立即死亡。

如何在返回false后访问input元素值?


HTML看起来像这样:

<tr>
    <td>Company Name*<br />
        <input type="text" id="cn" name="co_name" value="'.$client_data['co_name'].'">
    </td>
    <td>Company Main Phone*<br />
        <input type="text" id="cp" name="co_phone1" value="'.$client_data['co_phone1'].'">
    </td>
    <td>Company Website*<br />
        <input type="text" id="cw" name="co_website" value="'.$client_data['co_website'].'">
    </td>
</tr>

Javascript / JQuery是:

var cn = $('#cn');
var cp = $('#cp');
var cw = $('#cw');

$('#co_label').dialog({
    autoOpen: true,
    height: 600,
    width: 800,
    modal: true,
    buttons: 
        {
            Test: function() {
                alert('Clicked the test button');
                return false;
            },
            Okay: function() {
                alert('Okay button clicked');
                cn = cn.val();
                cp = cp.val();
                cw = cw.val();
                if (cn=='' || cp=="" || cw=="") {
                    alert('Fields marked with an asterisk cannot be empty.');
                    return false;
                }else{
                    //Save form data via ajax
                    $( this ).dialog( "close" );
                } //END ELSE
            },
            Cancel: function() {
                alert('Cancel button clicked');
                $( this ).dialog( "close" );
            }
        },
        close: function() {
            window.location = 'index.php';
        }
})

更新编辑:

感谢Colleen的深刻见解,我对问题有了更好的理解,并相应地更新了问题。似乎正在发生的事情是,在返回false后尝试读取输入元素值时,javascript会死掉。

1 个答案:

答案 0 :(得分:0)

var cn = $('#cn');

...

cn = cn.val();

您将cn声明为js对象,然后尝试将其重新分配为String。这可能是第一次工作(甚至不确定),但后来你肯定会尝试切换回一个对象失败,并导致一个JS异常,可能会阻止你的其余代码执行。

尝试:

var cnText = cn.val() 

或类似的东西。或者只是跳过将整个$("#cn")分配给var部分。