正規表現の検証を実行する小さなスクリプトを書いています。正規表現が一致しない場合は、送信/「次へ」ボタンを無効にします。正常に動作しますが、指定されたテキスト フィールドに何も入力されていない場合は、送信/「次へ」ボタンを有効にしたいと考えています。次のような関数があります。
function functionname( code, tograb ){
$.ajax({
url : "{% url survey.views.ajax %}",
data: {
'r_code': code,
'qid': '{{ question.id }}',
'other_text': tograb.value,
'csrfmiddlewaretoken': '{{ csrf_token }}'
}, success: function(html){
if (html != "OK") {
$('#Next').attr('disabled', true);
$(#'span' + String(code)).html(html);
} else {
$('#Next').removeAttr('disabled');
$(#'span' + String(code)).html("");
}
}
});
if (tograb.value.length == 0) {
console.log("removing attribute");
console.log(tograb.value.length);
$('#Next').removeAttr('disabled');
}
};
対応する HTML は次のようになります。
<input type="text" name="1" value = ""
id = "other_text1"
onkeyup="functionname('1', this)"
/>
これは、1 を超える文字列の長さで機能するすべてのものにうまく機能するようですが、テキスト フィールド内のすべてを削除すると機能しません。実際には、送信ボタンを再度有効にするという点で 0.5 秒間は機能しているように見えますが、その後ボタンを再び無効にします。
Firefox のデバッグ コンソールを見ると、次のように表示されます。
[14:02:26.757] GET http://myurl/survey/ajax?r_code=1&qid=9&other_text=d&
csrfmiddlewaretoken=m9s5BxbOeqDEheQyQmTIGzCrMbX56e8y [HTTP/1.1 200 OK 16ms]
[14:02:28.826] removing attribute @ http://myurl/survey/6:27
[14:02:28.829] 0 @ http://myurl/survey/6:28
[14:02:28.833] GET http://myurl/survey/ajax?r_code=1&qid=9&other_text=&
csrfmiddlewaretoken=m9s5BxbOeqDEheQyQmTIGzCrMbX56e8y [HTTP/1.1 200 OK 13ms]
そのため、理由はわかりませんが、2 つの AJAX 呼び出しが行われているようです。誰かが私にこの動作を説明したり、どこが間違っているかを示したりできますか? どんなフィードバックでも大歓迎です!