Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在clojure Hiccup中嵌入javascript?_Javascript_Html_Clojure_Clojurescript_Hiccup - Fatal编程技术网

如何在clojure Hiccup中嵌入javascript?

如何在clojure Hiccup中嵌入javascript?,javascript,html,clojure,clojurescript,hiccup,Javascript,Html,Clojure,Clojurescript,Hiccup,我正在用clojure编写一个带有Hiccup(和其他东西)的Web服务器应用程序。 我正在尝试使用一个复选框启用和禁用两个带有一点JS的下拉字段,但我无法使其工作 [:head [:script "function toggleText(cb, t1, t2) { document.getElementById(t1).disabled = !cb.checked; document.getElementById(t2).disabled = !cb.checked; }"]]

我正在用clojure编写一个带有Hiccup(和其他东西)的Web服务器应用程序。 我正在尝试使用一个复选框启用和禁用两个带有一点JS的下拉字段,但我无法使其工作

[:head
[:script "function toggleText(cb, t1, t2) {
    document.getElementById(t1).disabled = !cb.checked;
    document.getElementById(t2).disabled = !cb.checked;
}"]]

[:td (hf/check-box {:on-change (str "toggleText(" (name endtag) "," (name tytag) "," (name tmtag) ")")} endtag)]
[:td (hf/drop-down tytag (range 2013 2031) 2017)]
[:td (hf/drop-down tmtag (range 1 13) 6)]

on change
是一个React处理程序,在服务器端HTML中不起作用

如果不想创建一个单独的JS文件,可以使用
onclick
:下面应该可以工作(前提是
hf/复选框
函数创建具有给定属性的元素):


感谢Aleph,您的修复以及在函数中为cb参数添加getElementById就成功了

函数现在看起来像这样

[:script "function toggleText(cb, t1, t2) {
    document.getElementById(t1).disabled = !document.getElementById(cb).checked;
    document.getElementById(t2).disabled = !document.getElementById(cb).checked;}"]
[:td (hf/check-box {:onclick (str "toggleText('endtag','toyear','tomonth')")} :endtag (some? (:toyear m)))]
[:td (hf/drop-down :toyear (range 2013 2031))]
[:td (hf/drop-down :tomonth (range 1 13))]
我也简化了Hiccup代码(不将标记作为参数传递),所以看起来像这样

[:script "function toggleText(cb, t1, t2) {
    document.getElementById(t1).disabled = !document.getElementById(cb).checked;
    document.getElementById(t2).disabled = !document.getElementById(cb).checked;}"]
[:td (hf/check-box {:onclick (str "toggleText('endtag','toyear','tomonth')")} :endtag (some? (:toyear m)))]
[:td (hf/drop-down :toyear (range 2013 2031))]
[:td (hf/drop-down :tomonth (range 1 13))]

你不必嵌入。您可能遗漏了一件事,那就是
cljs->js
宏,也称为
#js
@Kingfranz。您能否澄清一下,您是在.clj文件的服务器端使用“real”Hiccup,还是在.cljs文件的客户端使用试剂使用Hiccup样式的语法。是的,这是“real”服务器端Hiccup:-)clj->js听起来很有趣,但它似乎更适合定义数据,而不是在元素中设置属性。