无法使列表框中的html事件正常工作

无法使列表框中的html事件正常工作,html,events,listbox,Html,Events,Listbox,我刚刚开始网络编程,所以我确信这是一个非常基本的错误,但我无法在html列表框中触发事件。以下是我的test.html全文: <html><body> <select name="drop1" id="Select1" size="4" multiple="multiple" onchange="alert('Click');"> <option value="1" onselect="alert('Click');">item 1&l

我刚刚开始网络编程,所以我确信这是一个非常基本的错误,但我无法在html列表框中触发事件。以下是我的test.html全文:

<html><body>

<select name="drop1" id="Select1" size="4" multiple="multiple" onchange="alert('Click');">

    <option value="1" onselect="alert('Click');">item 1</option>

    <option value="2">item 2</option>

    <option value="3">item 3</option>

    <option value="4">item 4</option>

    <option value="0">All</option>

</select>

</body></html>
当我输入php脚本的名称而不是“alert”时,当我单击列表中的任何项目时,都不会出现相同的结果。我错过了什么?我在谷歌上搜索了一段时间,但什么也没找到


编辑:所以“警报”的问题是特定于浏览器的。在Chrome中,正如EmCo所指出的,您需要javascript:前缀。但是在Firefox中,上面的脚本可以正常执行。

您不能直接从客户端事件运行PHP脚本

您需要的是AJAX,在更改下拉列表时,将触发对服务器的AJAX请求,该服务器将调用所需的PHP脚本


然后,您可以读取响应并根据响应进行操作。

您发布的代码对我有效,即当select中的选择更改时,将显示JavaScript警报。但是,我很担心你说的话:

当我输入php脚本的名称而不是“alert”时

两件事:

请告诉我们失败的实际代码。 如何尝试从HTML/JavaScript调用PHP脚本?PHP是一种服务器端技术,HTML和JavaScript是客户端技术。您说您刚刚开始,所以听起来好像您遇到了服务器和客户端之间的断开连接,并且不确定如何继续。 PHP函数不能像我怀疑的那样在浏览器中直接调用。当页面交付到浏览器时,整个PHP脚本已经运行。剩下的是浏览器客户端的HTML和JavaScript。使用JavaScript可以做很多更高级的事情,包括甚至对用PHP编写的服务器资源进行AJAX调用,但是仍然只会发出客户端内容并响应这些资源的输出


当select的选择发生变化时,您最终要做什么?

正如我在上面的评论中所说的,我认为您正在尝试重新创建已经存在的功能

提交时,所有命名元素及其值将通过元素中的method属性发送到action属性中指定的页面

例如:

www.mysite.com/myform.html


我认为您需要这样做:onchange=javascript:alert'Click';你是什么意思:当我输入php脚本的名称时?我指的是类似onchange=myfile的东西。php@Matt:这不是它的工作原理。当它发生变化时,你到底希望它做什么?@EmCo就是这样,举个例子!我最终想要的是让用户点击的内容发布到一个php文件中,然后由该文件进行处理,但是如果你想得到rep:1,那就用上面的“回答”吧。我做到了,这就是它的全部。2.在标记中,可以使用action=myscript.php,随后的输入小部件将调用myscript.php并发布一个值。例如,一个简单的文本字段。我尝试在这里做同样的事情,除了一个列表框,其中所选的值就是发布的内容。@Matt Phillips:那么PHP从何而来?发布的代码是如何不起作用的?我将它复制/粘贴到jsfiddle.net中,它显示的JavaScript警报与预期的完全一致。@David没有意识到你是这个答案的执行官。错误是特定于浏览器的,您需要javascript:正如EmCo所说,在Chrome中,而不是在Firefox中。我希望用php脚本“处理”列表框选择,就像使用标准html表单(例如输入文本框)一样。@Matt Phillips:啊,我明白了。嗯,你希望如何处理它以及你想要完成什么将影响到如何去做。您是否希望它在后台执行某些操作,例如使用AJAX?或者你想让它实际发布表单?前者可能会变得复杂,这取决于您需要什么,但后者应该足够简单。看看这里:@Matt Phillips:根据你上面的评论,听起来你真的想正常发布表单,只是在服务器端代码中看不到select值?这可能是多种原因造成的。如何访问服务器端代码中的值?在提供的代码中,所选的值在发布到服务器时应采用value drop1的形式。如果将客户端代码简化为表单中的select,而服务器端代码简化为仅访问该值,那么失败在哪里呢?如果php脚本以表单action=的形式给出,则会使用已发布的变量调用它。这就是我在这里要做的,有没有办法将列表框合并到html表单中?@Matt-您需要提交表单来完成此操作。。因此,只需将其放在中,即可在更改时自动提交表单:onchange=this.form.submit;如果这确实是你需要的,让我知道,我会编辑我的answ
呃,非常感谢,但这不是我想要的。我基本上想要你刚才描述的功能,但是没有单独的“提交”按钮。即,一旦用户单击列表项,就提交表单/执行操作。这将是一个经常使用的界面,“提交”按钮要求的额外点击会变得非常烦人。@Matt:那么你要找的是AJAX,我不确定在多选列表框中它会如何工作。
<form action="myscript.php" method="POST">
    <select name="drop1[]" size="4" multiple="multiple">
        <option value="1">item 1</option>
        <option value="2">item 2</option>
        <option value="3">item 3</option>
        <option value="4">item 4</option>
        <option value="0">All</option>
    </select>
    <input type="submit" name="submit" value="Submit">
</form>
<?php
    if (isset($_POST['submit'])) {
        print_r($_POST);
    } else {
        echo 'No data!';
    }
?>
Array
(
    [drop1] => Array
        (
            [0] => 2
            [1] => 4
        )

    [submit] => Submit
)