PHP textarea结合了select change和.load()函数

时间:2017-02-15 03:26:42

标签: javascript php jquery html

我有一个textarea,我将加载与我的select值相对应的术语。我使用.load将内容加载到textarea(" load_myinvoices_default_terms.php?id =" + id)。我可以成功加载内容。但是当我在textarea上键入然后更改所选的选项时,.load()函数将不再加载。

我的预感是,当我在textarea上键入时,它会被赋予值,而在我使用.load时,它会被放在html上。 我只是希望能够在textarea上输入,并且在我更改所选选项时仍然可以更改它的值。

invoice.php:

<select id="setDefaultTermSelection" name="invoice_term_id" onChange="load_myinvoices_default_terms();">
    <option value="0">Set as new term</option>
    <option value="1">Term 1</option>
    <option value="2">Term 2</option>
</select>

<textarea id="default_terms" name="invoice_terms" placeholder="Enter your terms and conditions" rows="5"></textarea>

脚本:

<script type="text/javascript">

function load_myinvoices_default_terms()
{
    var id = $("#setDefaultTermSelection").val();
    $("#default_terms").load("load_myinvoices_default_terms.php?id="+id);
}

$("#default_terms").keyup(function(e)
{
    $("#setDefaultTermSelection").val(0);
});
</script>

load_myinvoices_default_terms.php:

<?php
    include ("includes/connection.php");

    $id = $_REQUEST['id'];

    if($id > 0)
    {
        $query = "SELECT * FROM terms WHERE user_id = $_SESSION[user_id] AND term_id = $id";
        $selectQuery = mysqli_query($con,$query);
        $row = mysqli_fetch_array($selectQuery);

        echo $row['term_description'];
    }
    else
        echo "";
?>

2 个答案:

答案 0 :(得分:1)

当您以编程方式设置选择值时,会发生以下情况:$("#setDefaultTermSelection").val(0);,事件change 已触发。

onchange仅在用户点击时触发。来自MDN

  

针对<input><select><textarea>触发了更改事件   元素的值的更改由...提交时的元素   用户即可。与输入事件不同,更改事件不一定   为元素值的每次更改触发

但是,您可以使用jQuery的trigger()方法手动触发更改(“模拟”用户点击)。像这样:

$("#setDefaultTermSelection").val("0");
$("#setDefaultTermSelection").trigger("change");

或(一行):

$("#setDefaultTermSelection").val("0").change();

在上一个示例中,.change().trigger("change")

的别名

有些观点:

  1. value内的<option>标记是一个字符串。因此,您应该使用.val("0");
  2. 设置值
  3. 根据specification的事件实际上是onchange,而不是onChange(资本“C”)。但是,现代浏览器实际上都接受这两种方式。

答案 1 :(得分:0)

我已经解决了这个问题。 首先,我将这些放在我的脚本上,正如mrlew建议的那样。

$("#setDefaultTermSelection").val("0");
$("#setDefaultTermSelection").trigger("change");

然后在load_myinvoices_default_terms.php:

<?php
    include ("includes/connection.php");

    $id = $_REQUEST['id'];

    if($id > 0)
    {
        $query = "SELECT * FROM terms WHERE user_id = $_SESSION[user_id] AND term_id = $id";
        $selectQuery = mysqli_query($con,$query);
        $row = mysqli_fetch_array($selectQuery);

        $x = $row['term_description'];
        json_encode($x);
    }
    else
        echo "";
?>
<script>
    var ar = <?php echo json_encode($x) ?>;
    $("#default_terms").val(ar);
</script>

有更有效的方法来解决这个问题,所以请让我知道,谢谢:)