0

我刚刚发布了一个关于在新窗口中打开的问题,但是如果我使用 window.location 它不起作用?我的javascript有问题吗?

    <script type="text/javascript">

function setOptions(chosen){

var selbox = document.formName.table;
selbox.options.length = 0;

if (chosen == " ") {
 selbox.options[selbox.options.length] = new Option('No diploma selected',' ');
 }
if (chosen == "1") {
 selbox.options[selbox.options.length] = new Option('first choice - option one','http://www.pitman-training.com');
 selbox.options[selbox.options.length] = new Option('first choice - option two','onetwo');
 }
if (chosen == "2") {
 selbox.options[selbox.options.length] = new Option('second choice - option one','twoone');
 selbox.options[selbox.options.length] = new Option('second choice - option two','twotwo');
 selbox.options[selbox.options.length] = new Option('second choice - option three','twothree');
 selbox.options[selbox.options.length] = new Option('second choice - option four','twofour');
 }
if (chosen == "3") {
 selbox.options[selbox.options.length] = new Option('third choice - option one','threeone');
 selbox.options[selbox.options.length] = new Option('third choice - option two','threetwo');
 }
}

</script>

我知道它有点乱...

<form name="formName" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">

<select name="optone" size="1" onchange="setOptions(document.formName.optone.options[document.formName.optone.selectedIndex].value);">
 <option value=" " selected="selected">Please select a diploma</option>
 <option value="1">First Choice</option>
 <option value="2">Second Choice</option>
 <option value="3">Third Choice</option>
</select>

<select name="table" size="1" >
 <option value=" " selected="selected">No diploma selected</option>
</select>

<input type="submit" onclick="ob=this.form.table;window.location(ob.options[ob.selectedIndex].value)"/>


</form>

老实说,我对此并不满意,我想要一种隐藏提交按钮的方法,直到第二个选定的框被选中……但我不是 Java 专家!谁能指出我正确的方向?

4

2 回答 2

0

我不知道你是否说要在新窗口中使用它,所以...

如果你想要一个新窗口,那么

window.open(ob.options[ob.selectedIndex].value)

如果你想要同一个窗口,那么

window.location = ob.options[ob.selectedIndex].value
于 2010-03-18T15:42:29.117 回答
0

我有几个建议。

  • 您应该捕获onsubmit表单的事件而不是onclick提交按钮的事件。可以在不使用按钮的情况下提交表单(例如,按 Enter),因此您的 onclick 事件会错过这个。
  • 您可以使用该window.open(url)功能打开一个新窗口。
  • 而不是隐藏输入按钮(这不会阻止键盘用户提交表单),在 onsubmit 事件中确保选择了选项,return false;如果没有。
  • 您可以通过不对元素对象进行如此多的查找来整理和加速您的代码。
  • 在事件处理程序属性中使用this以获取触发元素的句柄,例如 <select name="optone" size="1" onchange="setOptions(this.options[this.selectedIndex].value);">

例子:

document.formName.table.onsubmit = function ()
{
    if (this.table.selectedIndex == 0 && this.optone.selectedIndex == 0)
    {
        // This is just an example. Showing a div would be better than alert();
        alert("You haven't filled in the required elements");

        // Cancel submission by returning false
        return false;
    }
    ob=this.table;

    // Open a new window and go to URL:
    window.open(ob.options[ob.selectedIndex].value);

    // Go to URL in current window:
    // window.location = ob.options[ob.selectedIndex].value;
}
function setOptions(chosen){       
    var selbox  = document.formName.table;
    var options = selbox.options;
    var cOpt    = options.length = 0; 

    if (chosen == " ") { 
        options[cOpt++] = new Option('No diploma selected',' '); 
    } 
    else if (chosen == "1") { 
        options[cOpt++] = new Option('first choice - option one','http://www.pitman-training.com'); 
        options[cOpt++] = new Option('first choice - option two','onetwo'); 
    } 
    else if (chosen == "2") { 
        options[cOpt++] = new Option('second choice - option one','twoone'); 
        options[cOpt++] = new Option('second choice - option two','twotwo'); 
        options[cOpt++] = new Option('second choice - option three','twothree'); 
        options[cOpt++] = new Option('second choice - option four','twofour'); 
    } 
    else if (chosen == "3") { 
        options[cOpt++] = new Option('third choice - option one','threeone'); 
        options[cOpt++] = new Option('third choice - option two','threetwo'); 
    } 
}

始终else if在适用的地方使用,并尽量减少对 DOM 节点及其属性(例如selbox.options.length)的查找。 cOpt++将让我们使用 的当前值,cOpt然后将其递增 1,因此您无需继续检查 . 的长度selbox.options

于 2010-03-18T16:05:46.803 回答