0

簡単な説明私はjquery、jqueryUI、ajaxを使用しています。

val()を使用して、最初にフィールドから値を取得しますが、フィールドの値を変更しても、値は同じままです。

長い説明n私はこのプロジェクトで約2年の大きなプロジェクトを開発しています私の頭はポンピングしています!;)

私はこのようなものを持っています:

これはdivのhtmlです:

<div id="add_task_diag" style="display: none">
   <label for="task">Task : </label><input id="taskfrm" label="Task" value="task" name="taskval" placeholder="e.g fill in tax form" />
   <button value="submit" class="btn btn-large add_task_frm">Add task</button> <button class="btn btn-large cancel_add_task">Cancel</button>
</div>
<button class="btn btn-primary" id="add_task"><i class="icon-file icon-white"></i> Add Todo</button>

これはスクリプトです:

<script>
$(".add_task_frm").click(function() {
    function taskgen() {
        var data = "task=" + $("#taskfrm").val();
        alert(data); // only for debuging
        var task_data = data;
        alert(task_data); // only for debuging
        $.post("whereitneedtogo.php?task=action80", task_data), //this is the ajax part
        $("#add_task_diag").dialog("destroy"); // I had here close I changed it to "destroy"
        task_data = undefined; //I tried to unset the variable
    }
    taskgen();
});​
</script>

私がそれを実行すると、すべてがうまくいきます!別の値で再送しても、変数は同じままです。たとえば、seccondテストのフィールドにtest123を入力すると、test123のままになります。変数をリセットするには、ページをリロードする必要があります。

location.reload()を使いたくない

このファイルの長さは1700行以上ですが、これが問題のある部分です。

私は次のようなことをたくさん試しました:-Domの準備ができた後にスクリプトを設定する-変数を未定義またはnullに設定する-jqueryタブを破棄する-唯一の部分はlocation.reloadですが、私のアプリケーションは完全なajaxです。

助けてくれてありがとうこれが愚かで簡単なものであることを願っています。

4

2 に答える 2

1

クリックするたびに関数を宣言して呼び出そうとしているのはなぜですか。クリックイベントハンドラーの外に移動してみてください。

<script>
$(".add_task_frm").click(function() {
    taskgen();
});​

function taskgen() {
        var data = "task=" + $("#taskfrm").val();
        alert(data); // only for debuging
        var task_data = data;
        alert(task_data); // only for debuging
        $.post("whereitneedtogo.php?task=action80", task_data), //this is the ajax part
        $("#add_task_diag").dialog("destroy"); // I had here close I changed it to "destroy"
        task_data = undefined; //I tried to unset the variable
    }

</script>

他の場所からtaskgen()を呼び出したい場合にも、スコープの問題が発生する可能性があります。

于 2012-09-28T21:10:50.737 に答える
0

これは、クリックハンドラー内でクロージャーを定義するためです。taskgen関数をクリックハンドラーの外に移動し、すべてをラップすると、準備が整います$(document).ready()。下記参照:

$(document).ready(function() {

    $(".add_task_frm").click(function() {
       taskgen();
    });

    function taskgen() {
       var data = "task=" + $("#taskfrm").val();

       alert(data); // only for debuging
       var task_data = data;
       alert(task_data); // only for debuging
       $.post("whereitneedtogo.php?task=action80", task_data), //this is the ajax part
       $("#add_task_diag").dialog("close").dialog("destroy"); // I usually chain 'close' and 'destroy'
    }

});
于 2012-09-28T21:11:29.583 に答える