从div标签中获取值

时间:2010-12-07 15:52:39

标签: javascript

我有以下情况,我知道stackoverflow中有很多这个主题,但没有答案给出真正的解决方案,所以我再次发布。

首先看一下这段代码:

<tr>
    <td align="right">Estado</td><td>
        <select name="estado" onChange="javascript:Atualiza(this.value,'0');">
            <option>[selecione]</option>
            <?
            $qry = "SELECT nome, uf FROM tb_estados"; 
            $res = mysql_query($qry);
            while ($ln = mysql_fetch_array($res)) { 
                echo "<option value='$ln[uf]'>".$ln['nome']."</option>"; 
            }
            ?>
        </select>
    </td>
</tr>

现在在这段代码

<tr>
     <td align="right">Cidade</td>
     <td><div id="atualiza"></div></td>
</tr> 

我有一个链接的组合,用于显示州和城市。

现在我的问题: 我无法从我的<div id="atualiza">获取<select name="estado"的值没有问题,因为它是我的表单的对象,但div标签不是表单的对象。 我需要INSERT INTO我的数据库<div id="atualiza">

的值

怎么做?

我想将值保存在隐藏字段中,并将表单发送到我的数据库中。

之前我遇到过类似的情况而且我解决了这个问题,但它太奇怪了,我知道有一个简单的方法可以做到这一点。

Atualiza功能

function Atualiza(valor,cid) 
{ 
    loadXMLDoc("combo_cidade.php",valor,cid); 
}

也是我的页面combo_cidade.php

<?php 
echo "<select name='cidade' id='cidade'>"; 
echo "<option>[selecione]</option>"; 

# my databse connection
include_once("config/config.php");

$sql = "SELECT tb_cidades.nome, tb_cidades.id FROM tb_cidades INNER JOIN tb_estados ON tb_cidades.uf=tb_estados.uf WHERE tb_cidades.uf='".$_GET["uf"]."'";
$resultado = mysql_query($sql); 
while ($linha = mysql_fetch_array($resultado)){ 
    if ($_GET["cid"]==$linha["id"]){$sel="selected";}else{$sel="";}
    echo "<option value='$linha[id]' $sel>$linha[nome]</option>"; 
} 
echo "</select>"; 


?>

以下是处理我的组合的整个脚本

// JavaScript Document
var req; 

function loadXMLDoc(url,valor,cid) 
{ 
    req = null; 
    // Procura por um objeto nativo (Mozilla/Safari) 
    if (window.XMLHttpRequest) { 
        req = new XMLHttpRequest(); 
        req.onreadystatechange = processReqChange; 
        req.open("GET", url+'?uf='+valor+'&cid='+cid, true); 
        req.send(null); 
    // Procura por uma versao ActiveX (IE) 
    } else if (window.ActiveXObject) { 
        req = new ActiveXObject("Microsoft.XMLHTTP"); 
        if (req) { 
            req.onreadystatechange = processReqChange; 
            req.open("GET", url+'?uf='+valor+'&cid='+cid, true); 
            req.send(); 
        } 
    } 
} 

function processReqChange() 
{ 
    // apenas quando o estado for "completado" 
    if (req.readyState == 4) { 
        // apenas se o servidor retornar "OK" 
        if (req.status == 200) { 
            // procura pela div id="atualiza" e insere o conteudo 
            // retornado nela, como texto HTML 
            document.getElementById('atualiza').innerHTML = req.responseText;           
        } else { 
            alert("Houve um problema ao obter os dados:\n" + req.statusText); 
        } 
    } 
} 

function Atualiza(valor,cid) 
{ 
    loadXMLDoc("combo_cidade.php",valor,cid); 
}

4 个答案:

答案 0 :(得分:1)

在页面中添加此JS代码:

<script type="text/javascript">
function AddHiddenValue(oForm) {
   var strValue = document.getElementById("atualiza").innerHTML;
   var oHidden = document.createElement("input");
   oHidden.name = "atualiza";
   oHidden.value = strValue;
   oForm.appendChild(oHidden);
}
</script>

然后在表单标签中显示:

<form ... onsubmit="AddHiddenValue(this);">

最后从PHP代码中的请求中读取“atualiza”的值。

答案 1 :(得分:1)

在javascript中,value属性用于表单元素,例如inputselecttextarea。如果你想获得DIV元素的“值”(我的意思是写在该标记内),你可以使用innerHTML属性。例如,请考虑以下HTML:

<div id="d">Hello</div>

现在document.getElementById('d').innerHTML将返回“Hello”。

回到您的代码,当您发送AJAX请求时,您会收到<select name='cidade' id='cidade'>...文本并将其设置为innerHTML标记的DIV。您可以使用select在内部document.getElementById('cidade').value中获取所选值,并将隐藏input的值设置为该值,因为当您将该字符串设置为innerHTMLDIV标记,将在select内解析并转换为普通DIV标记,即

<tr>
     <td align="right">Cidade</td>
     <td><div id="atualiza"><select name='cidade' id='cidade'><option>...</select></div></td>
</tr>

<强>结论:

将隐藏的input名称cidade放在表单中

<form ...>
...
<input type="hidden" name="cidade" id="cidade_input" value="" />

并在select的值更改时设置其值:

combo_cidade.php, line 2:
echo "<select name='cidade' id='cidade' onchange='f1(this.value);'>";

in your JavaScript:
function f1(value) {
    document.getElementById('cidade_input').value = value;
}

或表单提交时:

your form tag:
<form ... onsubmit="f2()">

in JavaScript:
function f2() {
    document.getElementById('cidade_input').value = document.getElementById('cidade').value;
}

关于代码的一些注意事项:

在你的php文件combo_cidade.php中,在第8行,你不应该直接使用请求($ _GET)中给出的值。这可能会导致代码中出现SQL注入。相反,您应该使用addslashes function(或PHP手册中强烈推荐的mysql_real_escape_string)来防止对您网站的SQL注入攻击。那将是这样的:

$sql = "SELECT tb_cidades.nome, tb_cidades.id FROM tb_cidades INNER JOIN tb_estados ON tb_cidades.uf=tb_estados.uf WHERE tb_cidades.uf='".addslashes($_GET["uf"])."'";

另一个注意事项:对于单引号以外的HTML属性值,最好使用双引号。您可以将第二行PHP代码更改为:

echo '<select name="cidade" id="cidade" onchange="f1(this.value);">';

最后一点:您不需要在echo'ed name中拥有select属性,因为它不在表单中,并且该属性将无用。因此它会是这样的:

echo '<select id="cidade" onchange="f1(this.value);">';

如果您使用onchange而非onsubmit(即在组合更改时设置隐藏的input值,而不是在提交表单时),id属性也没用。这将改为:

echo '<select onchange="f1(this.value);">';

答案 2 :(得分:0)

试试这个(在javascript中)。

var value = document.getElementById("atualiza").firstChild.nodeValue;

var value = document.getElementById("atualiza").innerText;

至于如何将这个(javascript)包含在PHP中,我不在那个联盟中(至今)。

希望这有帮助。

答案 3 :(得分:0)

为什么不把选择放在表格中?如果需要,您可以在页面中包含多个表单。