Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/384.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
Javascript 绑定后调用JS函数?_Javascript_Coldfusion - Fatal编程技术网

Javascript 绑定后调用JS函数?

Javascript 绑定后调用JS函数?,javascript,coldfusion,Javascript,Coldfusion,我正在构建一个ColdFusion 10表单,类似于发票。它包含三列 第一列是一个过滤器,用于选择所有可用产品的子集:它包含根据产品类别查询生成的cfselect 第二列是产品本身:它包含绑定到包含产品列表的表的cfselect,仅显示匹配类别中的产品 第三列是产品价格:它包含绑定到同一表中产品价格的cfdiv 我正在寻找一种方法来计算所选项目的总价。我特别想找的东西已经改变了触发器连接 我看到的解决方案: 总数是另一个绑定,取决于每个项目的价格。有点难看,因为这将在服务器端完成,即使一个简单的

我正在构建一个ColdFusion 10表单,类似于发票。它包含三列

第一列是一个过滤器,用于选择所有可用产品的子集:它包含根据产品类别查询生成的cfselect

第二列是产品本身:它包含绑定到包含产品列表的表的cfselect,仅显示匹配类别中的产品

第三列是产品价格:它包含绑定到同一表中产品价格的cfdiv

我正在寻找一种方法来计算所选项目的总价。我特别想找的东西已经改变了触发器连接

我看到的解决方案:

总数是另一个绑定,取决于每个项目的价格。有点难看,因为这将在服务器端完成,即使一个简单的JS可以做到。 在cfselect上使用onChange。在这种情况下,我如何确保在计算总额之前执行了价格绑定? 在cfselect上使用onChange,并直接查询该脚本中的价格,即使用XMLHttpRequest删除价格列上的绑定。我写了一些代码来实现这一点,它似乎可以工作,但我仍然需要将其更改为异步请求,并以独立于浏览器的方式对返回进行解码。这似乎比需要的复杂得多。 在cfdiv上使用不存在的onChange。这将是最简单的。。。但那个钩子不存在。 使用cfselect/cfinput代替第三列中的cfdiv,并使用css进行欺骗,使其看起来像一个div.丑陋。 与前一个相同,但隐藏,并保持现有cfdiv可见。可能是目前最好的选择,但所有查询都将执行两次。我相信有更好的办法。 使用计时器。我宁愿避免那样。 我错过了什么


谢谢。

回答我自己的问题,以防它能帮助别人

我很难找到什么,这个例子可以说明什么

简单CF绑定的粗糙jQuery等价物 $.get的示例实际上是对下载的数据做一些处理,而不仅仅是提醒它 $.get肯定不是介绍jQuery的推荐方法

这可能会让职业选手们惊呼不已。它不应该被认为是复制粘贴代码,而应该仅仅是关于如何实现它的提示

它实际上是从我的工作版本中强烈编辑的,所以它可能包含虚假的打字错误

好了,免责声明够了

function dollarize (price) {
    // unrelated code - just ensure that the price is always displayed with two decimals
}

function downloadPrice(url, DOM_Item_ID) {
    $.get( url,
           function(data,status){           // keep in mind that this function is called ASYNCHRONOUSLY
                //alert(data);  // typical data received, for a $1 item:  <wddxPacket version='1.0'><header/><data><string>1</string></data></wddxPacket>
                var payload = $(data).find('string').text();
                $('##' + DOM_Item_ID).text('$' + dollarize(parseFloat(payload)));   <!--- normally a single # - doubled since in a <cfoutput> --->
                UpdateTotalPrice();
          },
          "xml");
}

function UpdateTotalPrice() {
    var price = 0;
    for(var e=1;e<=#MAX_NUMBER_ITEM#;e++)
    {
        var node = document.getElementById("Item_"+e);
        var ID = node.selectedIndex;
        if(ID != 0) {
            prix += parseFloat(document.getElementById("Price_"+e).childNodes[0].nodeValue.substring(1));       // substring(1): removes the $ added above
        }
    }
    document.getElementById('TotalPrice').childNodes[0].nodeValue = '$' + dollarize(prix);
}

function onChangeItem(e) {
    var ID = document.getElementById("Item_"+e).value;
    downloadPrice("#application.CFC_PATH#gestion-equipements.cfc?method=trouvePrixStandardEquipement&ID="+ID,
            "Price_"+e);
}
第二栏:

<cfloop from="1" to="#MAX_NUMBER_ITEM#" index="e">
    ...
        <cfselect Name="Item_#e#" ID="Item_#e#" bind="........." bindonload="yes" queryPosition="below" onChange="onChangeItem(#e#)"><option value="0">--</cfselect>
第3列中的每个价格项目:

<cfdiv ID="Price_#e#" align="right">$0.00</cfdiv>       <!--- content of the div (i.e. $0.00) must NOT be empty, otherwise childNodes[0] above will fail --->
总价:

<cfdiv ID="TotalPrice">$0.00</cfdiv>

我认为您应该做的第一件事是停止使用任何ColdFusion UI向导——它们的实现非常糟糕——而只是通过一个流行的库使用HTML&JS和JS。这样,您就不会与CF以用户界面为中心的功能的局限性和低劣、过时的质量作斗争。只要使用JQuery之类的工具,我不同意。我把这等同于车轮的再发明。第三栏的div到底是什么?@DanBracuk它不是车轮的再发明……它更类似于不使用车轮的再发明——一种实施不善、架构过度的再发明。jmr-停止使用cfform、cfselect和cfdiv,按照Adam的说明去做,并学习如何以真实/正确的方式做事。否则你就是在设身处地地地妨碍自己。@DanBracuk,斯科特一针见血。有比ColdFusion的UI小部件更好/更快的轮子。